从List <Dictionary <DateTime,Points [] >>转换为Dictionary <DateTime,Points []>

时间:2019-11-07 08:50:01

标签: c# .net-core

我从任务中产生了List<Dictionary<DateTime, Points[]>> taskResult

var taskResult = tasks.Select(t => t.Result).ToList();
var data = new Dictionary<DateTime, Points[]>();

在我的函数中,我想返回Dictionary<DateTime, Points[]> data,但是我不知道该怎么做。我尝试使用foreach,但没有运气

1 个答案:

答案 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());