如何将ValueCollection转换为Dictionary?

时间:2012-09-25 07:36:12

标签: c# .net dictionary

我是Dictionary<string, Dictionary<string, List<SomeType>>>类型的词典成员。我想要的是从这个Dictionary<string, List<SomeType>>获得嵌套字典。我以为我会使用myDict.Values得到这个,但实际上它正在返回ValueCollection而不是嵌套词典本身。

现在我正在尝试使用ValueCollection.ToDictionary函数完成此操作,但如果您已经做过类似的事情,请分享。

更新 我想返回嵌套词典

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
  // get nested dictionary from this.myDict
}

4 个答案:

答案 0 :(得分:2)

  

我想要的是获得嵌套字典

return myDict.Values.ToDictionary(x => x.Keys, x => x.Values);

根据你的评论,看看LINQ表达式必须具有多大的复杂性,为什么不去寻找一个基本的for循环,例如

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
    foreach (var pair in dict)
    { 
        yield return pair.Value;
    }
}

它也可能比使用LINQ更有效。

答案 1 :(得分:2)

您需要使用GroupByKey进行分组,然后使用相同的密钥合并所有列表:

 Dictionary<string, List<SomeType>> GetKeyPairValues()
 {
      return dic.Values.SelectMany(d => d)
                       .GroupBy(p => p.Key)
                       .ToDictionary(g => g.Key, 
                                     g => g.SelectMany(pair => pair.Value)
                                           .ToList());
 }

答案 2 :(得分:1)

试试这个:

var dictionary = new Dictionary<string, Dictionary<string, List<int>>>();//initialize your source dictionary
var mergedDictionary = dictionary.SelectMany(d => d.Value).ToDictionary(k=>k.Key, k=>k.Value);

更新:使用ToDictionary

答案 3 :(得分:0)

实际上Dictionary<>实现了多个Values属性。如果您通过IDictionary<>使用它,则会获得ICollection<TValue>

IDictionary<string, Dictionary<string, List<SomeType>>> dict = new Dictionary<string, Dictionary<string, List<SomeType>>>();
ICollection<Dictionary<string, List<SomeType>>> = dict.Values;