如何判断两个List <string>是否相等,无论顺序如何?</string>

时间:2014-03-13 22:27:20

标签: c# linq

我有以下2个对象

List<string> list1
List<string> list2

在列表1上我有3个项目 在清单2上,我有不同顺序的3个项目。

我需要一个简单的方法来返回两个列表在包含相同元素时都是相等的,无论顺序是什么

4 个答案:

答案 0 :(得分:14)

您可以将SequenceEqual与其他订单一起使用:

return list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));

答案 1 :(得分:5)

您可以像这样使用AllContains方法,如果两个列表包含相同的元素,即使订单不同,也会返回true:

bool control = list1.All(x => list2.Contains(x) && 
                          list1.Count(a => a == x) == list2.Count(b => b == x));

答案 2 :(得分:3)

试试这个:

bool equals = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(y => y));

我希望这会有所帮助;)

答案 3 :(得分:0)

您应该考虑使用HashSet ,而不是List。它稍微便宜一点:

HashSet<string> firstSet = new HashSet<string>();
HashSet<string> secondSet = new HashSet<string>();

PopulateSets(firstSet, secondSet); //Example of method you might use to populate your hashsets.

bool isEqual = firstSet.SetEquals(secondSet);

来自MSDN:

  

SetEquals方法忽略重复的条目和其他参数中元素的顺序。