【问题标题】:HashTable to Dictionary conversion哈希表到字典的转换
【发布时间】:2015-04-20 06:00:45
【问题描述】:

我已将哈希表转换为字典。但问题是当我去打印它没有按顺序显示的值时。

aHashtable.Add(1014, "201");
aHashtable.Add(10, "ATIB");
aHashtable.Add(143, "LOVE");
aHashtable.Add(111, "HATE");

var dict= aHashtable.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);

foreach (KeyValuePair<object, object> keyValuePair in dict)
{
    Console.WriteLine(keyValuePair.Key + ": " +keyValuePair.Value);
}

有什么问题?

【问题讨论】:

    标签: c#


    【解决方案1】:

    默认情况下,字典是不排序的。 C# 有一个 OrderedDictionary

    另见:The order of elements in Dictionary

    【讨论】:

    • 我建议使用通用的SortedDictionary&lt;TKey, TValue&gt;,它更容易从Dictionary 转换并在使用时避免装箱
    • 取决于 OP 想要什么。 SortedDict 基于键排序。这与 OrderedDictionary 所做的不同。
    【解决方案2】:

    字典不根据输入顺序存储值。

    来自文档:

    出于枚举的目的,字典中的每个项目都被视为 一个 KeyValuePair 结构,表示一个值及其 钥匙。返回项目的顺序未定义。

    您需要ordered dictionary

    看到这个question

    【讨论】:

      【解决方案3】:

      请测试此代码:

      var aHashtable = new Hashtable {{1014, "201"}, {10, "ATIB"}, {143, "LOVE"}, {111, "HATE"}};
      var dict = aHashtable.Cast<DictionaryEntry> ().ToDictionary(d => d.Key, d => d.Value).OrderBy(x=>x.Key);
      
      foreach (var keyValuePair in dict)
      {
          Console.WriteLine(keyValuePair.Key + ": " + keyValuePair.Value);
      }
      

      【讨论】:

      • 如果您需要按名称订购,只需将 .OrderBy(x=>x.Name) 替换为 .OrderBy(x=>x.Key)
      猜你喜欢
      • 2018-07-18
      • 2011-03-11
      • 2014-01-04
      • 2012-04-21
      • 2013-03-21
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多