如何按字母顺序遍历Hashtable的键?

以递增的字母顺序遍历哈希表键的最简单方法是什么?

这完全取决于密钥的类型。 但我们假设他们是一个字符串。 您可以使用以下LINQ查询

Hashtable table = GetHashTable(); var keys = table.Keys.Cast().OrderBy(x => x); 

对于更复杂的结构,LINQ查询只是略有不同。 让我们假设您对密钥有以下定义

 struct Name { public string First; public string Last; // Equality code omitted } 

LINQ代码如下

 Hashtable table = GetHashtable(); var keys = table.Keys.Cast().OrderBy(x => x.First).ThenBy(x => x.Last); 

好吧,我发现这个片段最适合我的情况:

 Hashtable settings = GetSettings();
 ArrayList keys = new ArrayList();
 keys.AddRange(settings.Keys);
 keys.Sort();
 foreach(键中的对象键)
 {
     //逻辑在这里
 } 

如果你想要一个按键保持其自然顺序的地图,我建议你不要使用Hashtable开始。 如果您仍在使用1.1,请使用System.Collections.SortedList 。 如果您使用的是2.0或更高版本,请使用SortedListSortedDictionary 。 后两者在API方面基本相同,但具有不同的性能特征 – 有关更多信息,请参阅文档。

这不是真正的哈希表的设计(它们是为了统一分配键)。 使用排序树?

使用SortedList可能会稍快一些 –

 SortedList settings = new SortedList(GetSettings()); foreach (object key in settings.Keys) { //logic } 

创建和排序ArrayList是O(n)+ O(nlog n)= O(nlog n),而SortedList构造函数(根据文档)是O(n),因此直接使用SortedList会更快而不是使用arraylist并明确排序