我有以下2个对象
List<string> list1
List<string> list2
在列表1上我有3个项目 在清单2上,我有不同顺序的3个项目。
我需要一个简单的方法来返回两个列表在包含相同元素时都是相等的,无论顺序是什么
答案 0 :(得分:14)
您可以将SequenceEqual
与其他订单一起使用:
return list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
答案 1 :(得分:5)
您可以像这样使用All
和Contains
方法,如果两个列表包含相同的元素,即使订单不同,也会返回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方法忽略重复的条目和其他参数中元素的顺序。