为了账号安全,请及时绑定邮箱和手机立即绑定

GroupBy linq 方法的默认组

GroupBy linq 方法的默认组

C#
慕无忌1623718 2022-01-09 15:17:13
使用 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.


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信