按字母升序遍历哈希表键的最简单方法是什么?
问问题
11875 次
5 回答
12
这在很大程度上取决于密钥的类型。但是让我们假设它们是字符串。您可以使用以下 LINQ 查询
Hashtable table = GetHashTable();
var keys = table.Keys.Cast<String>().OrderBy(x => x);
对于更复杂的结构,LINQ 查询仅略有不同。假设您对键有以下定义
struct Name {
public string First;
public string Last;
// Equality code omitted
}
LINQ 代码如下
Hashtable table = GetHashtable();
var keys = table.Keys.Cast<Name>().OrderBy(x => x.First).ThenBy(x => x.Last);
于 2009-05-12T05:06:59.890 回答
7
好吧,我发现这个片段最适合我的情况:
哈希表设置 = GetSettings(); ArrayList 键 = 新 ArrayList(); 键.AddRange(settings.Keys); 键.排序(); foreach(键中的对象键) { // 这里的逻辑 }
于 2009-05-12T07:44:09.600 回答
2
如果您想要一张保持其键自然顺序的地图,我建议您不要使用Hashtable
开始。如果您仍在使用 1.1,请使用System.Collections.SortedList
. 如果您使用的是 2.0 或更高版本,请使用SortedList<TKey, TValue>
或SortedDictionary<TKey, TValue>
。后两者在 API 方面基本相同,但具有不同的性能特征 - 有关更多信息,请参阅文档。
于 2009-05-12T05:16:55.647 回答
1
这并不是哈希表的真正设计目的(它们被设计成具有统一的键分布)。使用排序树?
于 2009-05-12T05:07:07.190 回答
1
使用 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会更快比使用数组列表和显式排序
于 2009-05-12T11:48:33.837 回答