【发布时间】:2018-12-23 09:48:47
【问题描述】:
我喜欢 C# linq 以及扩展方法风格。
这是一个简单的代码,用于获取每个数字在数组中的次数:
static void Main(string[] args)
{
int[] nums = { 1, 2, 2, 3, 3, 3 };
var groups = nums.GroupBy(n => n);
//var keynums = nums.Distinct();//ok
var keynums = Enumerable.Range(0, 10);//causes ArgumentNullException
var timesDict = keynums.ToDictionary(n => n,
n =>
groups.FirstOrDefault(g => g.Key == n)
//((groups.FirstOrDefault(g => g.Key == n))??what can be put here)
.Count());
foreach (var kv in timesDict)
{
Console.WriteLine($"{kv.Key}\t{string.Join(" ", kv.Value)}");
}
Console.ReadKey();
}
代码有效,但如果我想知道数字 总是 [0-9],并且想知道 [0-9] 出现了多少次(如果没有出现,则计数应为 0)。
所以代码将得到ArgumentNullException,这是有道理的,因为FirstOrDefault 得到null。
为了解决这个问题,我想使用?? 运算符,并给它一个默认值。但我想不出如何构建这样的价值。
你会怎么解决?请不要使用if、select new {}等其他样式。
【问题讨论】:
标签: c# linq dictionary grouping