如何合并IDictionary<Guid, MyObject>
的两个字典,其中MyObject
是一个类示例?
IDictionary<Guid, MyObject> d1 = new Dictionary<Guid, MyObject>();
d1.Add(guid1, m1);
d1.Add(guid2, m2);
d1.Add(guid3, m3);
IDictionary<Guid, MyObject> d2 = new Dictionary<Guid, MyObject>();
d2.Add(guid2, m2);
d2.Add(guid3, m3);
d2.Add(guid4, m4);
IDictionary<Guid, MyObject> d3 = d1.Union(d2) ???
在d3
中有以下条目:
guid1,m1
guid2,m2
guid3,m3
guid4,m4
7条答案
按热度按时间ma8fv8wu1#
c90pui9n2#
d1.Union(d2).GroupBy (kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.First().Value);
出来做这个把戏。tpgth1q73#
如果你有重复的键,那么你必须使用where子句来处理重复的键。
**注意:**它不会获得重复键。如果存在任何重复键,则它将获得d1的键。
b4wnujal4#
你可以试试
concat的结果利用了字典是
IEnumerable<KeyvaluePair<Guid,MyObject>>
的事实因为我没有编译器,我只是检查了Distinct不能只接受一个lambda来选择要比较的属性。但是它可以接受一个EqualityComparer。我经常在项目中使用的是一个泛型等式比较器,它允许传入定义等式操作的lambda。
rggaifut5#
工会看起来不错:http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#union1
pdtvr36n6#
这将合并唯一键和唯一值列表:
tp5buhyn7#
如果不存在重复的关键字,则以下方法适用于2个(或更多)字典: