【发布时间】:2011-06-24 01:20:00
【问题描述】:
我必须比较两个列表并且只知道它们是否包含相同的值。我不打算对这些差异做任何事情。
在 C# 中实现这一目标的最佳方法是什么?
我知道我可以循环列表,但想知道是否有任何内置的 LINQ/扩展方法来实现这一点,从而提供更好的性能。尝试了除外/相交,但不知道它们是否最适合实现这一目标。
更新:列表中不会有任何重复项。
【问题讨论】:
标签: c# linq generics collections comparison
我必须比较两个列表并且只知道它们是否包含相同的值。我不打算对这些差异做任何事情。
在 C# 中实现这一目标的最佳方法是什么?
我知道我可以循环列表,但想知道是否有任何内置的 LINQ/扩展方法来实现这一点,从而提供更好的性能。尝试了除外/相交,但不知道它们是否最适合实现这一目标。
更新:列表中不会有任何重复项。
【问题讨论】:
标签: c# linq generics collections comparison
您想如何处理重复项?例如,您会将 { 2, 1, 1 } 视为与 { 1, 2 } 相同吗? (我假设顺序无关紧要......否则只需使用SequenceEqual。)
假设您只有效地关心“集合”,这里有两种选择:
一种快速而肮脏的方式:
if (!list1.Except(list2).Any() && !list2.Except(list1).Any())
一种更清洁的方式:
var set = new HashSet<int>(list1); // Adjust case accordingly
if (set.SetEquals(list2))
{
// Lists were equal
}
要考虑的一件事:如果您只对将它们视为集合感兴趣,您可能希望使用集合表示开始,而不是列表...
【讨论】:
SetEquals 而不是SymmetricExceptWith/Any: msdn.microsoft.com/en-us/library/bb346516.aspx