使用 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 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
您可以添加三个具有已知分组的项目,然后将它们分解出来,如下所示:
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.
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消