我有一个字符串数组,例如string str[] = {"a", "b"}
还有一个列表List<string> lst = new List<string> {"a", "b"}
我该如何确保字符串数组和列表都包含相同的值?注意:这些值可以以任何顺序出现,但必须具有相同的频率。
有人能告诉我如何在LINQ中实现吗?
谢谢。
我有一个字符串数组,例如string str[] = {"a", "b"}
还有一个列表List<string> lst = new List<string> {"a", "b"}
我该如何确保字符串数组和列表都包含相同的值?注意:这些值可以以任何顺序出现,但必须具有相同的频率。
有人能告诉我如何在LINQ中实现吗?
谢谢。
也许我有所遗漏,但为什么你不
SequenceEqual()
¹ 比较结果这样可以避免使用 Jason 的字典方法(显然这个方法也应该可以工作),并且对我来说更加自然/易懂?
¹:https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.sequenceequal
bool equals = str.OrderBy(s => s).SequenceEquals(lst.OrderBy(t => t));
好的,既然顺序不重要而频率重要,你需要计算每个键的数量,并检查产生的键/计数对是否相等:
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));
SequenceEquals
时,还要先进行GroupBy
呢?我认为可以跳过这一步。 - BrokenGlass你可以使用 Enumerable.SequenceEqual
string[] str =new [] {"a", "b"};
List<string> lst = new List<string> {"a", "b"};
bool result=str.SequenceEqual(lst);