【发布时间】:2011-06-05 09:34:08
【问题描述】:
我将 HashTable 附加到 WPF 中的组合框。问题是当程序运行时,我看到的值与我最初输入的顺序不同。
请告诉我为什么会这样。
提前致谢。
问候,
约翰。
【问题讨论】:
标签: c# sorting binding hashtable
我将 HashTable 附加到 WPF 中的组合框。问题是当程序运行时,我看到的值与我最初输入的顺序不同。
请告诉我为什么会这样。
提前致谢。
问候,
约翰。
【问题讨论】:
标签: c# sorting binding hashtable
哈希表不强制任何排序。通常,列表强制执行插入顺序。如果您需要键值对,可以尝试使用List<T> 并插入KeyValuePair<K,V>。 如果你真的需要字典,可以尝试使用SortedDictionary<K,V> 类。
【讨论】:
SortedDictionary<K,V> 不按插入顺序排序,而是使用(可选)IComparer<K> 按键排序。
HashTable、HashSet<T>、Dictionary<T> 等的枚举顺序未指定。在典型的实现中,元素以一种便于创建高效哈希表的方式放置在插槽中。
它不会尝试保留添加元素的顺序。
HashSet<T>类提供高性能的集合操作。集合是不包含重复元素且其元素没有特定顺序的集合。
【讨论】:
哈希表通过键的哈希对其元素进行排序,而不是按照它们添加到哈希表中的顺序。
【讨论】:
使用 Generic SortedList 解决了问题。感谢所有提供帮助的人。
【讨论】:
**
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
【讨论】: