2012-04-28 146 views
2

我有一个IEnumerable>的对象diceRolls。数据集看起来像 {{1,1}, {1,2}, {1,3}, {1,4}, {1,2}}分组IEnumerable <IEnumerable <int>>

我需要得到一个结果集对常用集合进行分组并汇总该集合的总行数。

我试过的GroupBy方法是这样的:

var aggregate = sorted.GroupBy(rolls => rolls, rolls => rolls); 

但事与愿违类的话,我能找到的辊内部没有田的,所以我唯一的选择就是整个物体本身的反对团体。我该怎么做呢?

+0

你是什么意思的普通设置相同的总数2-4和3-3或2-4,4-2将是一个组? – RichardOD 2012-04-28 13:07:44

+0

相同的数字,所以{1,2}和{1,2,}将是组,但不是{2,4}和{3,3}。我已经对结果进行了排序,所以我永远不会有{2,1},我会一直有{1,2}。 – 2012-04-28 13:14:28

回答

0

您可以传递给GroupBy自定义IEqualityComparer,它实现的序列等于是按照威胁{1,2}和{1,2}相同的顺序进行分组。但是,如果你知道,你的卷只有2个元素时,你可以使用匿名类型及其平等的实现:

var sorted = new[] { new[] { 1, 2 }, new[] { 1, 2 }, new[] { 1, 3 }, new[] { 2, 2 } }; 
var grouped = sorted.GroupBy(roll => new { r0 = roll[0], r1 = roll[1] }); 
var backToArrays = grouped.Select(g => new[] { g.Key.r0, g.Key.r1 }); 

该代码将产生{{1,2},{1,3},{2, 2}}。你需要吗?

+0

是的,除了我会有从2到20的任何数量的元素。 – 2012-04-29 12:13:47

相关问题