Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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
C# 如何比较两个无序序列(列表和数组)是否相等?_C#_Linq - Fatal编程技术网

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

C# 如何比较两个无序序列(列表和数组)是否相等?,c#,linq,C#,Linq,我有字符串数组saystringstr[]={“a”,“b”} 和List lst=新列表{“a”,“b”} 如何确保字符串数组和列表包含相同的值。注意:数值可以是任意顺序,但必须具有相同的频率 有人能告诉我在林克怎么做吗 谢谢。好的,因为顺序不重要,但频率重要,所以您需要对每个键进行计数,然后检查得到的键对/计数是否相等: var first = str.GroupBy(s => s) .ToDictionary(g => g.Key, g =>

我有字符串数组say
stringstr[]={“a”,“b”}

List lst=新列表{“a”,“b”}

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

有人能告诉我在林克怎么做吗


谢谢。

好的,因为顺序不重要,但频率重要,所以您需要对每个键进行计数,然后检查得到的键对/计数是否相等:

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));

您可以使用Enumerable.SequenceEqual

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

也许我遗漏了什么,但你为什么不

  • 两者都排序(因为顺序与您无关)
  • 将结果与
    SequenceEquals()

保存了Jason的字典方法(显然,这也应该有效),并且对我来说似乎更自然/更容易?

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

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

它们需要处于相同的顺序吗?是否(a)顺序和(b)计数重要?@jason不,它可以处于任何顺序。@Bhaskar K:等等,频率重要吗?@jason Yep。两者的计数应该相同,并且应该有相同的值。他说顺序不重要。好的,我没有看到这个。我在回答最初的问题。我看不出有必要减去我的答案。不管怎样,在之后对两个集合执行有序的
SequenceEquals
时,为什么要先执行
GroupBy
?你可以跳过这个。