猿问

GroupBy linq 方法的默认组

使用 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 也是合适的。


慕无忌1623718
浏览 165回答 1
1回答

拉丁的传说

您可以添加三个具有已知分组的项目,然后将它们分解出来,如下所示:var counts = myCollection&nbsp; &nbsp; .Concat(new[] { int.MinValue, 0, int.MaxValue }) // Add items to force groups&nbsp; &nbsp; .GroupBy(p => p<0?"a":p==0?"b":"c")&nbsp; &nbsp; .ToDictionary(g => g.Key, g => g.Count()-1);注意g.Count() - 1表达式,它可以撤消与强制默认项的数组连接的效果。在更复杂的场景中,当您需要组本身而不是简单的计数时,您需要将特殊的“占位符”对象与输入连接起来,然后在执行GroupBy.
随时随地看视频慕课网APP
我要回答