我从任务中产生了List<Dictionary<DateTime, Points[]>> taskResult
var taskResult = tasks.Select(t => t.Result).ToList();
var data = new Dictionary<DateTime, Points[]>();
在我的函数中,我想返回Dictionary<DateTime, Points[]> data
,但是我不知道该怎么做。我尝试使用foreach,但没有运气
答案 0 :(得分:8)
Enumerable.SelectMany
扩展方法是适合该工作的工具,它将许多集合组合为一个。字典是键值对的集合。
var combined = dictionaries
.SelectMany(dictionary => dictionary.Select(pair => pair))
.GroupBy(pair => pair.Key)
.ToDictionary(
group => group.Key,
group => group.SelectMany(pair => pair.Value).ToArray());
如果原始词典包含重复的日期,则上述方法将合并同一日期的点
由于Dictionary
实现了IEnumerable
,因此您可以在第一次调用.Select
时删除SelectMany
。
.GroupBy
的替代方法是.ToLookup
方法,每个键可以有多个值。
var combined = dictionaries
.SelectMany(dictionary => dictionary)
.ToLookup(pair => pair.Key, pair.Value)
.ToDictionary(
lookup => lookup.Key,
lookup => lookup.SelectMany(points => points).ToArray());