对IEnumerable <ienumerable <int>&gt; </ienumerable <int>进行分组

时间:2012-04-28 13:05:53

标签: c#-4.0 lambda

我有一个对象diceRolls,它是一个IEnumerable&gt;。数据集看起来像 {{1,1}, {1,2}, {1,3}, {1,4}, {1,2}}

我需要获得一个对公共集进行分组的结果集,并总结该集的总行数。

我尝试了这样的GroupBy方法:

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

但它没有组合任何内容,我发现roll对象内部没有字段可以分组,所以我唯一的选择是整个对象本身。我该怎么做?

1 个答案:

答案 0 :(得分:0)

你可以传递给GroupBy自定义IEqualityComparer,它实现了序列等于所以分组威胁{1,2}和{1,2}同样如此。但是如果你知道,当你可以使用匿名类型并且它等于实现时你的roll只有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}}。这是你需要的吗?