使用LINQ在C#中比较两个List<string>

3

如何基于顺序值的数量比较两个列表。因此,下面的所有列表都应该是不同的。

var list1 = new List<string> { "1", "2" };
var list2 = new List<string> { "2", "1" };
var list3 = new List<string> { "1", "2", "3" };

比较通常意味着确定顺序。你只想确定相等,对吗? - weston
我想是的。我想要根据这些条件检查列表的相等性。 - Vahid
可能是一个重复的问题:如何在C#中使用LINQ比较两个List<String> - Matthijs Wessels
2个回答

5

使用SequenceEqual如何?

参见http://ideone.com/yZeYRh

var a = new [] { "1", "2", "3" };
var b = new [] { "1", "2" };
var c = new [] { "2", "1" };

Console.WriteLine(a.SequenceEqual(b)); // false
Console.WriteLine(a.SequenceEqual(c)); // false
Console.WriteLine(c.SequenceEqual(b)); // false

它来自于命名空间System.Linq,可以用于任何IEnumerable
您还可以传递一个IEqualityComparer,以便执行如下操作:
var d = new [] { "a", "B" };
var e = new [] { "A", "b" };

Console.WriteLine(d.SequenceEqual(e, StringComparer.OrdinalIgnoreCase)); // true

1
我喜欢使用Zip来处理这个问题,但你仍需要手动比较Count。
lista.Count() ==listb.Count() && lista.Zip(listb, Equals).All(a=>a);

谢谢,你说的长度是什么意思? - Vahid
我的意思是Count,我已经包括了它。 - weston
谢谢你,韦斯顿。那现在它会处理所有的条件了吗? - Vahid
2
使用“sequence equal though”来比较序列,我之前不知道这个。 - weston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接