繁体   English   中英

怎么把ValueCollection转换成Dictionary?

[英]How to convert ValueCollection to Dictionary?

我有一个类型为Dictionary<string, Dictionary<string, List<SomeType>>>的字典成员。 我想要的是从中获取嵌套字典,即Dictionary<string, List<SomeType>> 我以为可以使用myDict.ValuesmyDict.Values ,但这实际上是在返回ValueCollection而不是嵌套字典本身。

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

更新我想返回嵌套字典

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

我想要的是获取嵌套字典

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

您需要使用GroupByKey进行分组,然后将所有列表与相同的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());
 }

尝试这个:

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

实际上, 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM