使用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也适用。
答案 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
之后将其过滤掉。