将字典转换为 List<KeyValuePair>

Posted

技术标签:

【中文标题】将字典转换为 List<KeyValuePair>【英文标题】:Convert dictionary to List<KeyValuePair> 【发布时间】:2011-06-01 05:30:30 【问题描述】:

我知道可以将 KeyValuePair 列表转换为字典,但是有没有一种快速的方法(除了手动循环)来执行反之亦然的操作?

这将是手动方式,

foreach (KeyValuePair<double,double> p in dict)

    list.Add(new KeyValuePair<double,double>(p.Key,p.Value));

没那么糟糕,但我只是好奇。

【问题讨论】:

你不需要创建新的KeyValuePairs;这要简单得多:foreach (KeyValuePair&lt;double, double&gt; p in dict) list.Add(p); 【参考方案1】:

要将Dictionary&lt;TKey, TValue&gt; 转换为List&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;,您只需说

var list = dictionary.ToList();

或者更详细的

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();

这是因为Dictionary&lt;TKey, TValue&gt; 实现了IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;

【讨论】:

值得注意的是,您必须将System.Linq; 添加为使用。【参考方案2】:

使用 linq:

myDict.ToList<KeyValuePair<double, double>>();

字典元素 KeyValuePair items.

【讨论】:

【参考方案3】:

就像杰森说的那样。但是,如果您真的不需要列表,则可以将其转换为ICollection&lt;TKey, TValue&gt;;因为它实现了这个接口,但有些部分只是显式的。此方法性能更好,因为它不会复制整个列表,只是重复使用相同的字典实例。

【讨论】:

铸造速度无限快。如果你只用小列表做几次,这并不明显,但它仍然很重要。 @Jason:不正确。对扩展方法 Enumerable.ToList> 的调用可能很昂贵。从另一个角度看,它必须返回一个新的列表,否则你可以通过向列表中添加项目来向字典中添加项目,这会很奇怪。 为什么人们总是把这些东西称为不必要的微优化?你怎么知道他不会用包含一百万个元素的列表运行它一千次?以最好的方式学习和做事不是总是更好吗?如果他学习软件编程而不给这些东西打*,那会更好吗?好吧,这不是我的问题,这样我就知道我总会有一份工作。 @fejesjoco:因为人们受制于周期和字节,就像 1980 年一样。一般来说,首先过于强调性能,而不是代码的清晰度和其他问题。性能不再是全部(例如,对于移动设备,我们应该优化功耗,而不是性能!)我不知道他不会在包含一百万个列表的情况下运行它一千次元素,但我怀疑他不会。如果他是,我仍然怀疑这是否重要。即使这很重要,他也有更大的问题要担心,因为他做错了什么。 你们在谈论这种优化,就像它不可读或功能不那么强大之类的,这太荒谬了。如果您所需要的只是一个集合,那么这很有效并且是首选方法,您不会牺牲任何可读性并且它会无限快(在少数可能很重要的边缘情况下)。这不是不必要的微优化,它只是一种好的做法。 OTOH,如果您需要列表,请点击并调用 .ToList(); -- 无论哪种方式,您的代码都易于阅读,并且可能在不牺牲可读性的情况下尽可能快。【参考方案4】:

对于 .NET 2.0:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);

【讨论】:

【参考方案5】:

我一直在尝试枚举一个 IDictionary 的 Exception.Data 实例。这就是最终奏效的方法:

    ICollection keys = idict.Keys;
    foreach(var key in keys)
    
       var value = idict[key];
       Console.WriteLine("0: 1", key, value);
    

【讨论】:

以上是关于将字典转换为 List<KeyValuePair>的主要内容,如果未能解决你的问题,请参考以下文章

将 DataTable 转换为 List<T>

C# 将字典转换为类似字符串的 CSV

将字典数组转换为 JSON 格式

将 List<object> 转换为 Dictionary<propertyname,propertyvalue>

如何将嵌套字典转换为 3D 数组

python 中怎么把,list,字典dict转换为字符串