假设我有Dictionary<int, String>
以下数据集:
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)的出现次数。循环(for
):
1st iteration : group 1 (a)
2nd iteration : group 1 (a) (a)
3rd iteration : group 1 (a) (a) (a)
4th iteration : group 1 (a) (a) (a)
group 2 (b)
5th iteration : group 1 (a) (a) (a)
group 2 (b) (b)
6th iteration : group 1 (a) (a) (a)
group 2 (b) (b) (b)
7th iteration : group 1 (a) (a) (a)
group 2 (b) (b) (b) (b)
8th iteration : group 1 (a) (a) (a)
group 2 (b) (b) (b) (b)
group 3 (c)
9th iteration : group 1 (a) (a) (a)
group 2 (b) (b) (b) (b)
group 3 (c) (c)
10th iteration : group 1 (a) (a) (a)
group 2 (b) (b) (b) (b)
group 3 (c) (c) (c)
因此,根据值的出现创建组。 在第4次交互中,我创建了2个组(计数= 3,b计数= 1)。在第8次迭代中,我创建了3个组(计数= 3,b计数= 4,c计数= 1)。
此外,我想比较这些事件,看看哪个统计占主导地位。我怎样才能做到这一点?
由于
感谢您的快速回答,但它并不适用于我。我没有足够精确,我还没有正确解释它。
for循环中的迭代描述了KNN算法中的特定K
数字。所以我试图为K = 1,K = 2 ... K = 10实现KNN算法。我的想法是分析特定K的值组(标签a,b,c)对于给定的K
,我需要知道我在每个组中有多少项来正确分类包含Dictionary<int, String>
的对象,但仅限于特定数量的元素(K
) - 并非所有他们一下子。对于K = 1
,我只考虑了词典中的第一个KeyValuePair
。对于K = 7
我在词典中仅考虑了7个KeyValuePair
,依此类推。基于此,我想比较特定Count
的每个K
值,这有助于我将每个对象分类为特定标签(a,b或c)。我想我需要使用for
循环来实现这一目标。但我不知道怎么做。
如此简单的var result = myDict.GroupBy(x => x.Value).ToDictionary(x => x.Key, x => x.Count());
将根据值(标签a,b,c)给出一组,但一次只能给出所有这些组。
我希望我能完全复杂化......
答案 0 :(得分:7)
使用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();