如何按字母顺序遍历哈希表的键?

发布于 2024-07-18 20:08:24 字数 28 浏览 5 评论 0原文

按字母升序遍历哈希表键的最简单方法是什么?

What is the easiest way to traverse a hashtable's keys in ascending alphabetical order?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

难理解 2024-07-25 20:08:24

这很大程度上取决于密钥的类型。 但让我们假设它们是字符串。 您可以使用以下 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);

This is fairly dependent upon what the type of the key is. But lets assume for a minute that they are strings. You could use the following LINQ query

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

For more complex structures the LINQ query is only slightly different. Lets assume you had the following definition for a key

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

The LINQ code would be the following

Hashtable table = GetHashtable();
var keys = table.Keys.Cast<Name>().OrderBy(x => x.First).ThenBy(x => x.Last);
以为你会在 2024-07-25 20:08:24

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

Hashtable settings = GetSettings();
ArrayList keys = new ArrayList();
keys.AddRange(settings.Keys);
keys.Sort();
foreach (object key in keys)
{
    // Logic here
}

Well, I found this snippet to be the most suitable to my situation:

Hashtable settings = GetSettings();
ArrayList keys = new ArrayList();
keys.AddRange(settings.Keys);
keys.Sort();
foreach (object key in keys)
{
    // Logic here
}

再可℃爱ぅ一点好了 2024-07-25 20:08:24

如果您想要一个将键保持自然顺序的映射,我建议您不要使用 Hashtable 开始。 如果您仍在使用 1.1,请使用 System. Collections.SortedList。 如果您使用的是 2.0 或更高版本,请使用 SortedList;SortedDictionary;。 后两者在 API 方面大部分相同,但具有不同的性能特征 - 请参阅文档以获取更多信息。

If you want a map which keeps its keys in natural order, I suggest you don't use Hashtable to start with. If you're still using 1.1, using System.Collections.SortedList. If you're using 2.0 or higher, use SortedList<TKey, TValue> or SortedDictionary<TKey, TValue>. The latter two are largely the same in terms of API, but have different performance characteristics - see the docs for more information.

握住你手 2024-07-25 20:08:24

这并不是哈希表的真正设计目的(它们被设计为具有均匀的键分布)。 使用排序树?

Thats not really what hash tables are designed for (they are made to have uniform distribution of keys). Use a sorted tree?

始终不够爱げ你 2024-07-25 20:08:24

可能会稍微快一些

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

使用 SortedList -创建和排序 。 对 ArrayList 进行排序是 O(n) + O(nlog n) = O(nlog n),而 SortedList 构造函数(根据文档)是 O(n),因此直接使用 SortedList 比使用要快数组列表和显式排序

It'll probably be slightly faster to use SortedList -

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

creating & sorting the ArrayList is O(n) + O(nlog n) = O(nlog n), whereas the SortedList constructor (according to the docs) is O(n), so it'll be faster to use SortedList directly rather than using an arraylist and explicitly sorting

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文