如何比较存储在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
}
...
如果实际上保留其中一个作为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}。只有当确实有逻辑集合时才使用集合操作。