Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换元组<;列表<;Guid>;,字符串>;到字典<;Guid、列表<;字符串>&燃气轮机;_C#_List_Linq_Dictionary - Fatal编程技术网

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 }