C# 转换元组<;列表<;Guid>;,字符串>;到字典<;Guid、列表<;字符串>&燃气轮机;
我正在尝试将C# 转换元组<;列表<;Guid>;,字符串>;到字典<;Guid、列表<;字符串>&燃气轮机;,c#,list,linq,dictionary,C#,List,Linq,Dictionary,我正在尝试将元组转换为字典。这就是我到目前为止所做的: var listOfTuples = GetListOfTuples(); // returns type List<Tuple<List<Guid>, string>> var transformedDictionary = new Dictionary<Guid, List<string>>(); foreach (var listOfTuple in listOfTuples
元组
转换为字典
。这就是我到目前为止所做的:
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);
}
}
你很接近。问题在于选择正确的键和值
var result = listOfTuples.SelectMany(t => t.Item1.Select(g => (g, str: t.Item2)))
.GroupBy(item => item.g, item => item.str)
.ToDictionary(g => g.Key, g => g.ToList());
这里的错误是(y,z)=>新的{key=y.Item2,value=z}
-您希望键
是Guid
,因此它不是Item2
,而是z
,这是Guid
。所以你可以按照我写的方式去做,或者
(y, z) => new { key = z, value = y.Item2 }
此外,不需要开头的
.ToList()
。你说,listOfTuples
已经返回了一个列表你尝试过linq解决方案吗?我尝试过。但是我没能让它工作。请分享你所做的尝试。如果你把LINQ的逻辑分成几个步骤,这很容易。首先,您可以使用SelectMany
将原始列表转换为1:1,然后从那里开始,您需要的就是正确的GroupBy
,您应该能够通过这些提示了解如何操作。这似乎是一个X,Y问题,为什么您首先要使用该数据结构谢谢,@gilad green。我将首先尝试您对我的代码的更正。我也将分析你的方法,这对我来说是新的。我还注意到,在我的LINQ代码片段中,最后一部分需要更新为.ToDictionary(x=>x.Key,x=>x.Select(m=>m.value))
@Tom-如果有帮助,请告诉我:)并且很高兴您发布了您尝试的内容
(y, z) => new { key = z, value = y.Item2 }