【问题标题】:Dictionary .Values and .Keys to array (in same order)字典 .Values 和 .Keys 到数组(以相同的顺序)
【发布时间】:2013-10-23 14:59:47
【问题描述】:

有没有一种优雅的方法可以以相同的顺序获取字典的键和值?我担心如果我使用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 等)方法可以以相同的顺序获取这些?

非常感谢您的帮助。

【问题讨论】:

  • 你可以使用Values, from the docs: "Dictionary.ValueCollection 中的值的顺序是未指定的,但它与中的关联键的顺序相同Keys 属性返回的 Dictionary.KeyCollection。"
  • 好问题。我用过dict.Values.ToArray(),它在不同的环境中给了我不同的结果。

标签: c# dictionary toarray


【解决方案1】:

作为 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++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2011-04-06
    • 2015-04-04
    • 2020-11-01
    • 2010-11-09
    相关资源
    最近更新 更多