C# 使用LINQ对字典中的事件进行分组和计数

C# 使用LINQ对字典中的事件进行分组和计数,c#,linq,dictionary,C#,Linq,Dictionary,假设我有一本带有以下数据集的词典: 1 a 2 a 3 a 4 b 5 b 6 b 7 b 8 c 9 c 10 c 我有150个包含这本词典的对象。每个对象都有不同的数据集。在键值对中,键总是1-10,值可能是这个集合{a,b,c}中的一个。 我想使用LINQ对这些数据进行分组,并按以下方式计算值(a、b、c)的出现次数。循环内(用于): 因此,将根据值的出现情况创建组。 在第四次交互中,我创建了两个组(a计数=3,b计数=1)。在第8次迭代中,我创建了3个组(a计数=3,b计数=4,c计数

假设我有一本带有以下数据集的
词典

1 a
2 a
3 a
4 b
5 b
6 b
7 b
8 c
9 c
10 c
我有150个包含这本词典的对象。每个对象都有不同的数据集。在键值对中,键总是1-10,值可能是这个集合{a,b,c}中的一个。 我想使用LINQ对这些数据进行分组,并按以下方式计算值(a、b、c)的出现次数。循环内(
用于
):

因此,将根据值的出现情况创建组。 在第四次交互中,我创建了两个组(a计数=3,b计数=1)。在第8次迭代中,我创建了3个组(a计数=3,b计数=4,c计数=1)

此外,我想比较这些事件,看看哪个计数占主导地位。我怎样才能做到这一点

谢谢

编辑 谢谢你的快速回答,但这不适用于我。我不够精确,我没有正确地解释它

for循环中的迭代在KNN算法中描述特定的
K
number。所以我试图实现K=1,K=2的KNN算法。。。K=10。我的想法是分析特定K的值组(标签a、b、c)。对于给定的
K
,我需要知道每个组中有多少项才能正确地对包含
字典的对象进行分类,但只针对特定数量的元素(
K
),而不是一次针对所有元素。对于
K=1
我只考虑字典中的第一个
KeyValuePair
。对于
K=7
我在字典中只考虑了7个first
KeyValuePair
,以此类推。基于此,我想比较特定
K
的每个
Count
值,这将帮助我将每个对象分类到特定标签(a、b或c)。我想我需要使用
for
循环来实现这一点。但我不知道怎么做

所以简单
var result=myDict.GroupBy(x=>x.Value).ToDictionary(x=>x.Key,x=>x.Count())将根据值(标签a、b、c)给出一个组,但同时给出所有值


我希望我没有将事情完全复杂化…

对于LINQ,它非常简单:

var result = myDict.GroupBy(x => x.Value).ToDictionary(x => x.Key, x => x.Count());
您不需要任何迭代,因为LINQ正在为您完成所有工作

要获得最高金额,您现在只需拨打:

result.Max(x => x.Value);
或者,如果您还需要该金额的条目:

result.OrderBy(x => x.Value).First();

你没有存储什么
字典
,其中键是你的标签,值是你的计数?LINQ的一个伟大功能是你可以操作所有的循环和迭代,让LINQ为你做这件事。那么,您为什么要迭代您的字典呢?我很困惑,您是想要一个Linq查询来获得最终结果,还是想要一个for循环来获得所有中间结果?还有,您尝试过什么?您的尝试遇到了什么问题?@Yuval Itzhakov-因为我希望字典中的键(int)在KNN算法中是K-number,值作为标签。
result.OrderBy(x => x.Value).First();