为了简单起见,我将集合作为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
}
...
答案 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}。如果确实具有逻辑集,则仅使用设置操作。