将字典转换为List <KeyValuePair>

Sea*_*ean 47 c# generics collections

我知道可以将KeyValuePair的List转换为Dictionary,但是有一种快速的方法(除了手动循环)以执行相反的操作吗?

这将是手动方式,

foreach (KeyValuePair<double,double> p in dict)
{
    list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
}
Run Code Online (Sandbox Code Playgroud)

不是那么糟糕,但我只是好奇.

jas*_*son 112

要将a转换Dictionary<TKey, TValue>为a,List<KeyValuePair<TKey, TValue>>你可以说

var list = dictionary.ToList();
Run Code Online (Sandbox Code Playgroud)

或者更冗长

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();
Run Code Online (Sandbox Code Playgroud)

这是因为Dictionary<TKey, TValue>工具IEnumerable<KeyValuePair<TKey, TValue>>.

  • 值得注意的是,你必须添加`System.Linq;`作为使用. (12认同)

Ode*_*ded 8

使用linq:

myDict.ToList<KeyValuePair<double, double>>();
Run Code Online (Sandbox Code Playgroud)

字典元素 KeyValuePair项目.


fej*_*oco 5

像杰森说的那样.但是如果你真的不需要列表,那么你可以将它转换为ICollection <TKey,TValue>,因为它实现了这个接口,但是某些部分只是显式的.此方法执行得更好,因为它不复制整个列表,只是重用相同的字典实例.

  • @fejesjoco:因为人们被奴役了周期和字节,就像它仍然是1980年一样.在代码清晰度和其他问题上,人们通常过于强调性能.性能不再是全部终端(例如,移动设备,我们应该优化功耗,而不是性能!)我不知道他将不会运行它一千次包含一百万的列表元素,但我怀疑他不会.如果他是,我仍然怀疑它是否重要.即使它确实很重要,他也有更大的问题值得担心,因为他做错了什么. (5认同)
  • 施法速度无限快.如果你只用小清单做几次就不会引起注意,但是,它确实很重要. (2认同)
  • 为什么人们不断地将这些事情称为不必要的微观优化?你怎么知道他不会用包含一百万个元素的列表运行它一千次?以最好的方式学习和做事并不总是更好吗?如果他学习软件编程而不给出关于这些东西的*会更好吗?好吧,不是我的问题,这种方式我知道我总是有工作. (2认同)
  • 你们正在谈论这种优化,就像它不可读或某种程度上不那么强大或者某种东西,这太荒谬了.如果您需要的只是一个集合,这非常有用并且是首选方法,您不会牺牲任何可读性,而且它会无限快(在可能很重要的少数边缘情况下).这不是一个不必要的微优化,这只是一个很好的实践.OTOH,如果你*需要*一个列表,请点击并调用.ToList(); - 无论哪种方式,您的代码都易于阅读,并且可能在不牺牲可读性的情况下尽可能快. (2认同)