Dictionary<objectx,objecty> d.
我想使用 LINQ 选择在“d”中出现次数最多的对象 y。
d.GroupBy(t => t.Value)
给了我结果,我无法从中获取值。
谢谢
objecty maxOccurenceValue = d.GroupBy(kv => kv.Value)
.OrderByDescending(g => g.Count())
.First().Key;
请注意,您的对象需要覆盖Equals
和GetHashCode
/或实现IEqualityComparer<T>
.
List<Order> orders=new List<Order>
{new Order(){State="cali",ID=1},
new Order(){State="cali",ID=2},
new Order(){State="nali",ID=3},
new Order(){State="pali",ID=4},
new Order(){State="pali",ID=5},
new Order(){State="cali",ID=3},
};
List<Order> gr=null;
orders.GroupBy(g => g.State).ToList().ForEach(d=>
{
if(gr==null)
gr = d.ToList<Order>();
else if (gr.Count() < d.Count())
gr = d.ToList<Order>();
});
return gr;
是的,您可以使用 OrderBy 来做到这一点,但如果 List 中有很多元素,我认为 OrderBy 是重型扩展功能。我希望这会有所帮助。
或者,如果您真的只关心哪个发生最多(而不是他们拥有哪些键),请忽略它是 aDictionary
并仅对Value
.
Dictionary<string, int> dict = new Dictionary<string, int>
{
{"hi", 3},
{"there", 3},
{"you", 4},
{"have", 5},
{"a", 5},
{"nice", 5},
{"hat", 5},
{"and", 6},
{"shoes", 6},
};
var result = dict
.Select(d => d.Value)
.GroupBy(k => k)
.OrderByDescending(k => k.Count())
.First()
.Key;
Console.WriteLine(result);
// 5
编辑:我喜欢不使用第二个转换。谢谢,@蒂姆。更改了我的并删除了对不再在他的帖子中的内容的引用。