如何比较存储在IEnumerable中的集合

本文关键字:IEnumerable 集合 存储 何比较 比较 | 更新日期: 2023-09-27 17:50:38

为简单起见,我将集合作为IEnumerable传递。我需要检查,两个这样的集合是否相等。目前我是这样做的:

if (theirs.OrderBy(t => t).SequenceEquals(mine.OrderBy(t => t)))
    // equal

有更简单的方法吗?


我需要这段代码主要用于一系列这样的比较:

if (mine."equals"(new[] { a, b })
{
    do sth
}
else if (mine."equals"(new[] { a, c })
{
    do sth
}
else if (mine.contains(a))
{
    do sth
}
...

如何比较存储在IEnumerable中的集合

如果实际上保留其中一个作为ISet<T>,则可以调用SetEquals。当然,您可以选择这样做:

ISet<Foo> setFoo = theirs as ISet<Foo>;
if (setFoo != null && theirs.SetEquals(mine))
{
    ...
}
// Not a set? Use the slower approach

你不需要对集合进行排序——你可以这样做:

if (new HashSet<Foo>(theirs).SetEquals(mine))
例如

。正如在注释中所指出的,这将把{1,1,2}视为等于{1,2,2}。只有当确实有逻辑集合时才使用集合操作。