任何内置方法只知道两个列表是否不同?

Die*_*kes 3 c# linq generics collections comparison

我必须比较两个列表,知道它们是否包含相同的值.我不打算对这些差异做任何事情.

在C#中实现这一目标的最佳方法是什么?

我知道我可以循环列表,但想知道是否有任何内置的LINQ/extenstion方法来实现这一点,从而提供更好的性能.尝试了Except/Intersect,但不知道它们是否是最合适的.

更新:列表中不会包含任何重复项.

Jon*_*eet 6

你想如何处理重复?例如,您是否会将{2,1,1}视为与{1,2}相同?(我假设订单无关紧要......否则只需使用SequenceEqual.)

假设你只关心"套"有效,这里有两个选择:

快速而肮脏的方式:

if (!list1.Except(list2).Any() && !list2.Except(list1).Any())
Run Code Online (Sandbox Code Playgroud)

一种稍微清洁的方式:

var set = new HashSet<int>(list1); // Adjust case accordingly
if (set.SetEquals(list2))
{
    // Lists were equal
}
Run Code Online (Sandbox Code Playgroud)

需要考虑的一件事是:如果您只想将它​​们视为集合,那么您可能希望使用集合表示来开始,而不是列表......

  • 你可以使用`SetEquals`而不是`SymmetricExceptWith` /`Any`:http://msdn.microsoft.com/en-us/library/bb346516.aspx (2认同)