【发布时间】:2010-10-13 23:16:01
【问题描述】:
我想比较两个Dictionary<string, string> 实例的内容,而不管它们包含的项目的顺序如何。 SequenceEquals 也比较顺序,所以我先按键排序字典,然后调用SequenceEquals。
有什么方法可以代替SequenceEquals 只比较内容吗?
如果没有,这是理想的方法吗?
Dictionary<string, string> source = new Dictionary<string, string>();
Dictionary<string, string> target = new Dictionary<string, string>();
source["foo"] = "bar";
source["baz"] = "zed";
source["blah"] = null;
target["baz"] = "zed";
target["blah"] = null;
target["foo"] = "bar";
// sequenceEquals will be false
var sequenceEqual = source.SequenceEqual(target);
// contentsEqual will be true
var contentsEqual = source.OrderBy(x => x.Key).SequenceEqual(target.OrderBy(x => x.Key));
【问题讨论】:
-
这个问题包含一个很大的缺陷。没有元素在字典中的顺序之类的东西。根据定义,字典保存键值对,没有任何隐式排序。
标签: c# linq dictionary comparison