我有2个IEnumerable系列,其中包含一个字符和字符数(即s1 {Key =' a' Count =' 5'}和s2 {Key =& #39; a' Count =' 4'})
我想使用Linq查询执行以下操作:
如果该项目在两个集合中,我只希望集合中的项目具有更高的计数,即来自s1的Count = 5
如果该项目只在一个集合中,那么我们使用该项目(不能使用Distinct,因为它说IEnumerable Anonymous不包含Distinct)
如果这些物品都在两个集合中,但它们的数量是相等的,那么我们使用哪一个并不重要。
无法弄清楚这一部分,我很确定一旦我看到解决方案,我就会想要把头撞到墙上......
答案 0 :(得分:6)
使用Linq
扩展功能,您可以执行此操作。
Dictionary<char,int> dic1 = ...;
Dictionary<char,int> dic2 = ...;
var result = dic1.Concat(dic2)
.GroupBy(g=>g.Key)
.ToDictionary(x=>x.Key, x=>x.Max(m=>m.Value)) ;
如果你有两个包含key, count
fields/properties
的基础类型的集合,那么请尝试使用它。
var result = list1.Concat(list2)
.GroupBy(g=>g.Key)
.Select(x=>new // Create an object instead if you have one.
{
x.Key,
x=>x.Max(m=>m.Count)
};
选中此Demo
答案 1 :(得分:3)
您可以按Key
进行分组,然后选择最高Count
:
var collection1 = "testtt".GroupBy(c => c).Select(g => new { Key = g.Key, Count = g.Count() });
var collection2 = "teessst".GroupBy(c => c).Select(g => new { Key = g.Key, Count = g.Count() });
var result = collection1.Concat(collection2)
.GroupBy(item => item.Key, item => item.Count)
.Select(g => new { Key = g.Key, Count = g.Max() });
答案 2 :(得分:2)