当前位置:  开发笔记 > 编程语言 > 正文

如何将Dictionary <TKey,TValue>的所有值作为IList <TValue>?

如何解决《如何将Dictionary<TKey,TValue>的所有值作为IList<TValue>?》经验,为你挑选了3个好方法。

我有以下字典:

IDictionary> myDictionary 

我希望将字典中的所有值都作为IList获取....


只是添加一些背景知道我是如何进入这种情况的....

我有一个方法,让我得到一个MyClass列表.然后我有另一种方法将该列表转换为字典,其中key是MyClass的id.稍后......并且无法访问原始列表......我需要获取原始的未分组的MyClass列表.


当我将myDictionary.Values.ToList()传递给一个接受IList的方法时,我得到一个编译错误,说它无法转换

System.Collections.Generic.List> 

至:

System.Collections.Generic.IList

现在,我可以理解它已经消失并将每个IList组添加到新列表中作为列表的单独元素....但在这种情况下它并不是我真正想要的.我只想要整个字典中所有值的列表.

那么如何在不循环遍历字典中的每个键值并创建我想要的列表的情况下如何获得我所追求的内容?



1> MrProgram..:

注意到很多答案都很老了.

这也有效:

using System.Linq;

dict.Values.ToList();


@rolls不,因为`dict.Values.ToList()`与`dict.Values.SelectMany(x => x)不同,后者导致列表列表,而'SelectMany`展平并连接结果列表成一个序列.
我不知道为什么会有这么多的赞成.这并没有解决@JohnLeidegren提到的问题......它没有"压扁"字典值

2> John Leidegr..:

由于字典(或哈希表)的维护方式,这就是你要做的.在内部,实现包含密钥,桶(用于冲突处理)和值.您可能能够检索内部值列表,但您最好使用以下内容:

IDictionary> dict;
var flattenList = dict.SelectMany( x => x.Value );

它应该做的伎俩;)SelectMany展平结果,这意味着每个列表被连接成一个长序列(IEnumerable`1).



3> Jon Skeet..:

John的建议的一个变种:

var flattenedValues = dict.Values.SelectMany(x => x);

如果您在列表中需要它们,您当然可以调用ToList:

var flattenedList = dict.Values.SelectMany(x => x).ToList();

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有