将字典转换为 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<double, double> p in dict) list.Add(p);
【参考方案1】:
要将Dictionary<TKey, TValue>
转换为List<KeyValuePair<TKey, TValue>>
,您只需说
var list = dictionary.ToList();
或者更详细的
var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();
这是因为Dictionary<TKey, TValue>
实现了IEnumerable<KeyValuePair<TKey, TValue>>
。
【讨论】:
值得注意的是,您必须将System.Linq;
添加为使用。【参考方案2】:
使用 linq:
myDict.ToList<KeyValuePair<double, double>>();
字典元素是 KeyValuePair
items.
【讨论】:
【参考方案3】:就像杰森说的那样。但是,如果您真的不需要列表,则可以将其转换为ICollection<TKey, TValue>
;因为它实现了这个接口,但有些部分只是显式的。此方法性能更好,因为它不会复制整个列表,只是重复使用相同的字典实例。
【讨论】:
铸造速度无限快。如果你只用小列表做几次,这并不明显,但它仍然很重要。 @Jason:不正确。对扩展方法 Enumerable.ToList对于 .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>的主要内容,如果未能解决你的问题,请参考以下文章