如何按字母顺序遍历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或更高版本,请使用SortedList
或SortedDictionary
。 后两者在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并明确排序