LINQ:检查两个列表是否相同

时间:2009-10-27 03:42:47

标签: linq

这应该很容易。

我想检查两个列表是否相同,因为它们包含所有相同的元素,不重要。

认为重复的元素是相等的,即new[]{1,2,2}new[]{2,1}相同

5 个答案:

答案 0 :(得分:31)

var same = list1.Except(list2).Count() == 0 && 
           list2.Except(list1).Count() == 0;

答案 1 :(得分:6)

编辑:这是在OP添加{1,2,2}等于{1,1,2}之前编写的(关于处理重复条目)。

只要元素与订单具有可比性,这将有效。

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

答案 2 :(得分:3)

SetEqualsHashSet最适合检查两个集合是否与此问题中定义的相同

        string stringA = "1,2,2";
        string stringB = "2,1";

        HashSet<string> setA = new HashSet<string>((stringA.Trim()).Split(',').Select(t => t.Trim()));
        HashSet<string> setB = new HashSet<string>((stringB.Trim()).Split(',').Select(t => t.Trim()));

        bool isSetsEqual = setA.SetEquals(setB);

参考:

  1. Check whether two comma separated strings are equal (for Content set)

答案 3 :(得分:1)

您需要获取两个列表的交集:

bool areIntersected = t1.Intersect(t2).Count() > 0;

回答你的修改问题:

bool areSameIntersection = t1.Except(t2).Count() == 0 && t2.Except(t1).Count() == 0;

答案 4 :(得分:0)

如果list2中list1元素的数量等于list1中list2元素的数量,那么列表都包含相同数量的元素,它们都是彼此的子集 - 换句话说,它们都包含相同的元素。 / p>

if (list1.Count(l => list2.Contains(l)) == list2.Count(l => list1.Contains(l)))
    return true;
else
    return false;