2

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

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

我尝试了这样的 GroupBy 方法:

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

但它没有对任何东西进行分组,而且我在 rolls 对象内找不到要分组的字段,所以我唯一的选择是整个对象本身。我该怎么做呢?

4

1 回答 1

0

您可以传递给实现序列等于的GroupBy自定义IEqualityComparer,因此 group by 将威胁 {1, 2} 和​​ {1, 2} 相同。但是,如果您知道,当您可以使用匿名类型及其 equals 实现时,您的 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 }}。是你需要的吗?

于 2012-04-28T15:06:51.330 回答