如何比较两个无序序列(列表和数组)是否相等?

时间:2011-05-11 13:50:25

标签: c# linq

我有字符串数组说string str[] = {"a", "b"}

List<string> lst = new List<string> {"a", "b"}

如何确保字符串数组和列表包含相同的值。 注意:值可以是任何顺序,但必须具有相同的频率。

有谁能告诉我如何在LINQ中做到这一点?

感谢。

4 个答案:

答案 0 :(得分:11)

也许我错过了什么,但你为什么不这样做

  • 对两者进行排序(因为订单与您无关)
  • 将结果与SequenceEquals()
  • 进行比较

保存Jason的字典方法(显然,它应该也能正常工作),对我来说似乎更自然/更容易?

答案 1 :(得分:5)

接受的答案对我来说有点尴尬。你为什么不能这样做:

bool equals = str.OrderBy(s => s).SequenceEquals(lst.OrderBy(t => t));

答案 2 :(得分:1)

好的,既然顺序无关紧要,但是频率确实如此,你需要计算每个键,然后检查得到的键/计数对是否相等:

var first = str.GroupBy(s => s)
               .ToDictionary(g => g.Key, g => g.Count());

var second = lst.GroupBy(s => s)
                .ToDictionary(g => g.Key, g => g.Count());

bool equals = first.OrderBy(kvp => kvp.Key)
                   .SequenceEquals(second.OrderBy(kvp => kvp.Key));

答案 3 :(得分:-1)

您可以使用Enumerable.SequenceEqual

  string[] str =new [] {"a", "b"};
  List<string> lst = new List<string> {"a", "b"};
  bool result=str.SequenceEqual(lst);