我想使用 Linq 创建一个函数来总结传入的值序列。该函数应如下所示:
IDictionary<TKey, Summary<TKey>> Summarize<TKey, TValue>(IEnumerable<TValue> values)
{
return values
.ToLookup(val => GetKey(val)) // group values by key
.Union(*an empty grouping*) // make sure there is a default group
.ToDictionary(
group => group.Key,
group => CreateSummary(group)); // summarize each group
}
问题是生成的 IDictionary 应该有一个 default(TKey) 条目,即使传入的序列不包含具有该键的值。这可以以纯粹的功能方式完成吗?(不使用可变数据结构。)
我能想到的唯一方法是在查找之前调用 .Union ,然后将其输入字典。但这需要我创建一个空的 IGrouping,如果没有明确的类,这似乎是不可能的。有没有一种优雅的方式来做到这一点?
编辑:我们可以假设 TKey 是一个值类型。