字典.Values和.Keys到数组(按相同顺序)

时间:2013-10-23 14:59:48

标签: c# dictionary toarray

是否有一种优雅的方式来获得字典的键和值以相同的顺序?我担心如果我使用dict.Values.ToArray()dict.Keys.ToArray()(或dict.Select(obj => obj.Key)dict.Select(obj => obj.Value)),那么它们的顺序不会相同。

执行此操作的简单方法是:

foreach (var keyAndVal in dict)
{
    keyList.Add(keyAndVal.Key);
    valueList.Add(keyAndVal.Value);
}
var keyArray = keyList.ToArray();
var valueArray = valueList.ToArray();

对我而言,这感觉就像LINQ的目的一样(但我知道字典迭代顺序不能保证在两个不同的调用中保持不变)。是否有一种优雅(即LINQ等)的方式来获得相同的顺序?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

作为 vcsjones points out,对于标准字典,KeysValues集合的顺序相同。但是,如果您想要一个方法来创建始终按相同顺序排列的键和值数组,那么对于IDictionary<TKey, TValue>的任何实现,您可以执行以下操作:

var keyArray = new TKey[dict.Count];
var valueArray = new TValue[dict.Count];
var i = 0;
foreach (var keyAndVal in dict)
{
    keyArray[i] = keyAndVal.Key;
    valueArray[i] = keyAndVal.Value;
    i++;
}