【发布时间】:2018-10-11 16:55:24
【问题描述】:
我正在尝试将Tuple<List<Guid>, string> 转换为Dictionary<Guid, List<string>>。这是我到目前为止所拥有的:
var listOfTuples = GetListOfTuples(); // returns type List<Tuple<List<Guid>, string>>
var transformedDictionary = new Dictionary<Guid, List<string>>();
foreach (var listOfTuple in listOfTuples)
{
foreach (var key in listOfTuple.Item1)
{
if (!transformedDictionary.ContainsKey(key))
transformedDictionary[key] = new List<string> { listOfTuple.Item2 };
else transformedDictionary[key].Add(listOfTuple.Item2);
}
}
有没有更好的方法,也许是使用 LINQ; SelectMany、Grouping 或 toDictionary?
更新:我试过了,但显然不行:
listOfTuples.ToList()
.SelectMany(x => x.Item1,(y, z) => new { key = y.Item2, value = z })
.GroupBy(p => p.key)
.ToDictionary(x => x.Key, x => x.Select(m => m.key));
【问题讨论】:
-
您尝试过任何 linq 解决方案吗?
-
我有。但我无法让它工作。
-
请分享您的尝试
-
如果您将逻辑拆分为 LINQ 的步骤,这非常容易。首先,您可以使用
SelectMany将原始列表转换为 1 对 1,然后从那里您需要的是正确的GroupBy,您应该能够通过这些提示弄清楚如何做到这一点。 -
这似乎是一个 X,Y 问题,为什么你首先要有那个数据结构
标签: c# list linq dictionary