【发布时间】:2011-11-08 05:43:36
【问题描述】:
我想使用 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 是一个值类型。
【问题讨论】: