我有字符串数组说string str[] = {"a", "b"}
和List<string> lst = new List<string> {"a", "b"}
如何确保字符串数组和列表包含相同的值。 注意:值可以是任何顺序,但必须具有相同的频率。
有谁能告诉我如何在LINQ中做到这一点?
感谢。
答案 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);