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

时间:2014-03-16 08:13:09

标签: c# set comparison ienumerable

为了简单起见,我将集合作为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
}
...

1 个答案:

答案 0 :(得分:2)

如果您实际将其中一个保留为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}。如果确实具有逻辑集,则仅使用设置操作。