【问题标题】:Hashtable sorting problem.Data appeared in different order哈希表排序问题。数据以不同的顺序出现
【发布时间】:2011-06-05 09:34:08
【问题描述】:

我将 HashTable 附加到 WPF 中的组合框。问题是当程序运行时,我看到的值与我最初输入的顺序不同。

请告诉我为什么会这样。

提前致谢。

问候,

约翰。

【问题讨论】:

    标签: c# sorting binding hashtable


    【解决方案1】:

    哈希表不强制任何排序。通常,列表强制执行插入顺序。如果您需要键值对,可以尝试使用List<T> 并插入KeyValuePair<K,V>如果你真的需要字典,可以尝试使用SortedDictionary<K,V> 类。

    【讨论】:

    • SortedDictionary<K,V> 不按插入顺序排序,而是使用(可选)IComparer<K> 按键排序。
    • @LukeH,你完全正确;有一秒钟的大脑放屁。编辑答案以反映这一点。
    【解决方案2】:

    HashTableHashSet<T>Dictionary<T> 等的枚举顺序未指定。在典型的实现中,元素以一种便于创建高效哈希表的方式放置在插槽中。

    它不会尝试保留添加元素的顺序。

    HashSet<T> 类提供高性能的集合操作。集合是不包含重复元素且其元素没有特定顺序的集合。

    【讨论】:

      【解决方案3】:

      哈希表通过键的哈希对其元素进行排序,而不是按照它们添加到哈希表中的顺序。

      【讨论】:

        【解决方案4】:

        使用 Generic SortedList 解决了问题。感谢所有提供帮助的人。

        【讨论】:

          【解决方案5】:

          **

          Keys 集合的排序基于存储密钥项目的插槽。 item 存储的 slot 取决于 key 的 hash 值和冲突解决策略。

          **

          要从 Hashtable 中检索项目,您可以按键索引 Hashtable,就像按序数值索引数组一样。以下简短的 C# 程序演示了这个概念。它将许多项目添加到哈希表中,将字符串键与每个项目相关联。然后,可以使用其字符串键访问特定项目。

          使用系统; 使用 System.Collections;

          公共类 HashtableDemo { private static Hashtable employees = new Hashtable();

          public static void Main()
          {
              // Add some values to the Hashtable, indexed by a string key
              employees.Add("111-22-3333", "Scott");
              employees.Add("222-33-4444", "Sam");
              employees.Add("333-44-55555", "Jisun");
          
              // Access a particular key
              if (employees.ContainsKey("111-22-3333"))
              {
                  string empName = (string) employees["111-22-3333"];
                  Console.WriteLine("Employee 111-22-3333's name is: " + empName);
              }
              else
                  Console.WriteLine("Employee 111-22-3333 is not in the hash table...");
          }
          

          } 此代码还演示了 ContainsKey() 方法,该方法返回一个布尔值,指示是否在 Hashtable 中找到指定的键。 Hashtable 类包含一个 Keys 属性,该属性返回 Hashtable 中使用的键的集合。该属性可用于枚举Hashtable中的项,如下所示:

          // 遍历 Hashtable 中的所有项目 foreach(employees.Keys 中的字符串键) Console.WriteLine("员工值[\"" + key + "\"] = " + employees[key].ToString()); 意识到插入项目的顺序和 Keys 集合中键的顺序不一定相同。 Keys 集合的排序基于存储密钥项目的插槽。存储项目的槽取决于键的哈希值和冲突解决策略。如果您运行上面的代码,您可以看到枚举项目的顺序不一定与将项目添加到 Hashtable 的顺序相匹配。运行上述代码输出:

          员工价值["333-44-5555"] = Jisun 员工价值[“111-22-3333”] = Scott 员工价值[“222-33-4444”] = Sam 即使数据以“Scott”、“Sam”、“Jisun”的顺序插入到 Hashtable 中。

          http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx

          【讨论】:

            猜你喜欢
            • 2023-03-27
            • 2017-03-07
            • 1970-01-01
            • 2011-05-04
            • 1970-01-01
            • 2017-01-26
            • 2013-01-31
            • 2021-09-29
            • 2020-04-17
            相关资源
            最近更新 更多