0

我有一个 type 的字典成员Dictionary<string, Dictionary<string, List<SomeType>>>。我想要的是从中获取嵌套字典 ie Dictionary<string, List<SomeType>>。我以为我会得到这个 using myDict.Values,但这实际上是返回ValueCollection而不是嵌套字典本身。

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

更新 我想返回嵌套字典

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

4 回答 4

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 更有效。

于 2012-09-25T07:38:23.470 回答
2

您需要使用GroupBy分组,Key然后将所有列表与相同的键合并:

 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());
 }
于 2012-09-25T07:49:30.493 回答
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

于 2012-09-25T07:40:50.730 回答
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;
于 2012-09-25T07:40:29.650 回答