如何使用Linq从匿名IEnumerable集合中选择项目

Mat*_*ttE 1 c# linq collections ienumerable

我有2个IEnumerable集合,其中包含一个字符和字符的计数(即s1 {Key ='a'Count ='5'}和s2 {Key ='a'Count ='4'})

我想用Linq查询执行以下操作:

如果该项目在两个集合中,我只希望来自集合的项目具有更高的计数,即来自s1的Count = 5

如果该项只在一个集合中,那么我们使用该项(不能使用Distinct,因为它说IEnumerable Anonymous不包含Distinct)

如果这些物品都在两个集合中,但它们的数量相等,那么我们使用哪一个并不重要.

无法想象这一部分,我很确定一旦我看到解决方案,我想要把我的头撞到墙上......

Har*_*sad 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)) ; 
Run Code Online (Sandbox Code Playgroud)

如果你有两个基础类型包含的集合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) 
     }; 
Run Code Online (Sandbox Code Playgroud)

检查一下 Demo