C# 如何将ValueCollection转换为Dictionary?

C# 如何将ValueCollection转换为Dictionary?,c#,.net,dictionary,C#,.net,Dictionary,我有一个类型为dictionary的dictionary成员。我想要的是从这个字典中获取嵌套字典,即字典。我想我应该使用myDict.Values来获取它,但实际上返回的是ValueCollection,而不是嵌套字典本身 现在,我正在尝试使用ValueCollection.ToDictionary函数来完成此操作,但如果您已经完成了类似的操作,请与我们分享 更新 我想返回嵌套字典 Dictionary<string, List<SomeType>> GetKeyPair

我有一个类型为
dictionary
的dictionary成员。我想要的是从这个字典中获取嵌套字典,即
字典
。我想我应该使用
myDict.Values
来获取它,但实际上返回的是
ValueCollection
,而不是嵌套字典本身

现在,我正在尝试使用ValueCollection.ToDictionary函数来完成此操作,但如果您已经完成了类似的操作,请与我们分享

更新 我想返回嵌套字典

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
  // get nested dictionary from this.myDict
}
字典GetKeyPairValues()
{
//从this.myDict获取嵌套字典
}
我想要的是得到嵌套字典

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
  // get nested dictionary from this.myDict
}
根据您的评论,看看LINQ表达式对此的复杂性,为什么不使用基本的for循环呢

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
    foreach (var pair in dict)
    { 
        yield return pair.Value;
    }
}
字典GetKeyPairValues()
{
foreach(dict中的var对)
{ 
收益率-收益对.价值;
}
}
它也可能比使用LINQ更有效

我想要的是得到嵌套字典

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
  // get nested dictionary from this.myDict
}
根据您的评论,看看LINQ表达式对此的复杂性,为什么不使用基本的for循环呢

Dictionary<string, List<SomeType>> GetKeyPairValues()
{
    foreach (var pair in dict)
    { 
        yield return pair.Value;
    }
}
字典GetKeyPairValues()
{
foreach(dict中的var对)
{ 
收益率-收益对.价值;
}
}
它也可能比使用LINQ更有效。

实际上
字典
实现了多个
属性。如果您通过
IDictionary
使用它,您将获得一个
ICollection

IDictionary dict=new Dictionary();
i采集=记录值;
实际上
字典
实现了多个
属性。如果您通过
IDictionary
使用它,您将获得一个
ICollection

IDictionary dict=new Dictionary();
i采集=记录值;
试试这个:

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);
var dictionary=newdictionary()//初始化源字典
var mergedDictionary=dictionary.SelectMany(d=>d.Value).ToDictionary(k=>k.Key,k=>k.Value);
更新:使用ToDictionary

尝试以下操作:

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);
var dictionary=newdictionary()//初始化源字典
var mergedDictionary=dictionary.SelectMany(d=>d.Value).ToDictionary(k=>k.Key,k=>k.Value);

更新:使用ToDictionary

您需要使用
GroupBy
键进行分组,然后使用同一键合并所有列表:

 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());
 }
字典GetKeyPairValues()
{
返回dic.Values.SelectMany(d=>d)
.GroupBy(p=>p.Key)
.ToDictionary(g=>g.Key,
g=>g.SelectMany(pair=>pair.Value)
.ToList());
}

您需要使用
GroupBy
键进行分组
,然后使用同一键合并所有列表:

 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());
 }
字典GetKeyPairValues()
{
返回dic.Values.SelectMany(d=>d)
.GroupBy(p=>p.Key)
.ToDictionary(g=>g.Key,
g=>g.SelectMany(pair=>pair.Value)
.ToList());
}

当当前词典中有一个以上的词典时,预期的结果是什么?我想合并它们。在我的例子中,一个嵌套字典的键值肯定不会和另一个发生冲突。当当前字典中有一个以上的字典时,预期的结果是什么?我想合并它们。在我的例子中,一个嵌套字典的键值肯定不会与另一个发生冲突。我认为SelectMany的输出应该是IEnumerable,而不是字典。@AksharRoop它会,这不是你要找的。我希望字典隐藏一些细节,说明事情是如何实现的。@AksharRoop查看我的答案,了解我认为SelectMany的get-That输出是IEnumerable,而不是字典。@AksharRoop它会,这不是你要找的。我想让Dictionary隐藏一些细节是如何实现的。@AksharRoop看到我的答案,我第一次尝试使用ToDictionary时是如何做到这一点的,但ToDictionary(x=>x.Keys,x=>x.Values)实际上是在创建Dictionary,我在第一次尝试使用ToDictionary时就是这么做的,但是ToDictionary(x=>x.键,x=>x.值)实际上是在为您的答案创建Dictionary of Thank,但我实际上是在寻找geting Dictionary类型,而不是ICollection。但是Values提供了字典中的所有字典,因此是一个集合感谢您的答案,但是我实际上是在寻找geting Dictionary类型,而不是ICollection。但是Values提供了所有的D字典中的字典,因此是一个集合