GroupBy Linq方法的默认组

时间:2018-09-09 00:02:44

标签: c# list linq collections group-by

使用GroupBy方法时是否可以定义默认组。仅在该组没有任何项目时使用。

让我们说,如果这些集合[-4, -3, -2, -1, 0]是负数,零和正数,则应分为三组a, b, c。最后,每个组的计数应类似于[4, 1, 0]

myCollection.GroupBy(p=>p<0?"a":p==0?"b":"c").Select(p=>p.Count()).ToArray()

可能是组c也存在而没有任何项目。

任何其他单线linq也适用。

1 个答案:

答案 0 :(得分:1)

您可以添加三个具有已知分组的项目,然后将它们排除在外,如下所示:

var counts = myCollection
    .Concat(new[] { int.MinValue, 0, int.MaxValue }) // Add items to force groups
    .GroupBy(p => p<0?"a":p==0?"b":"c")
    .ToDictionary(g => g.Key, g => g.Count()-1);

请注意g.Count() - 1表达式,它可以消除与强制默认项的数组串联的效果。

在更复杂的情况下,如果您需要组本身而不是简单的计数,则需要将特殊的“占位符”对象与输入连接起来,然后在执行GroupBy之后将其过滤掉。