Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:检查两个列表是否相同_Linq - Fatal编程技术网

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

LINQ:检查两个列表是否相同,linq,Linq,这应该很容易 我想检查两个列表是否相同,它们是否包含所有相同的元素,顺序并不重要 重复的元素被认为是相等的,即,new[]{1,2,2}与new[]{2,1}您需要获得两个列表的交集: bool areIntersected = t1.Intersect(t2).Count() > 0; 在回答您被修改的问题时: bool areSameIntersection = t1.Except(t2).Count() == 0 && t2.Except(t1).Count() =

这应该很容易

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


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

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

bool areIntersected = t1.Intersect(t2).Count() > 0;
在回答您被修改的问题时:

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

如果list2中list1元素的计数等于list1中list2元素的计数,则两个列表都包含相同数量的元素,都是彼此的子集,换句话说,它们都包含相同的元素

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

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

只要元素在顺序上具有可比性,这将起作用

bool equal = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));
of最适合于检查两个集合是否等于此问题中定义的集合

        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);
stringA=“1,2,2”;
字符串stringB=“2,1”;
HashSet setA=newhashset((stringA.Trim()).Split(“,”).Select(t=>t.Trim());
HashSet setB=newhashset((stringB.Trim()).Split(',).Select(t=>t.Trim());
bool-isSetsEqual=setA.SetEquals(setB);
参考:


  • 我想我的问题措辞不清楚。。。我已经修改了这个问题如果
    t1
    是{1,2,2}而
    t2
    是{1,2,2},这将错误地返回false。这对重复项没有帮助。@leppie:你是什么意思?如果
    list1
    包含4
    3
    ,那么
    equal
    只有在
    list2
    也正好包含4
    3
    时才是真的。重复工作正常。如果序列的顺序相同,您可以执行OrderBy调用;例如,当您比较测试中的出现列表时。@Jason:是的,但问题明确指出,您不能对元素的顺序进行任何假设。3个元素与10个元素的对比情况如何,所有元素都是“a”。什么是不同的副本?更“linq”的版本:
    !list1.Except(list2).Any()&&!list2.Except(list1.Any()
    @TLS),它不需要计算所有的差异,只需要计算第一个。@280Z28:所以你因为答案而否决了一个问题?听起来不太合理。@Ngu,谢谢你的澄清。HashSet的SetEquals最适合于检查两个集合是否相等,如本问题中所定义的。使用HashSet似乎是最优雅的方法(可能也很快)
            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);