我想使用Linq创建一个汇总传入值的函数。该函数大致应如下所示:
捕捉是:即使传入的序列中不包含具有该键的值,生成的IDictionary也应该有一个default(TKey)的条目。这能通过纯函数式方法实现吗?(不使用可变数据结构。)
我唯一想到的方法是,在将其导入字典之前在查找上调用.Union。但那需要我创建一个空IGrouping,而没有明确的类似IGrouping的类型。有一种优雅的方式来解决这个问题吗?
编辑:我们可以假设TKey是值类型。
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,而没有明确的类似IGrouping的类型。有一种优雅的方式来解决这个问题吗?
编辑:我们可以假设TKey是值类型。