用于Ruby的有序哈希是什么?

时间:2015-06-23 16:52:55

标签: ruby hash hashmap hashtable

我最近开始学习Ruby和哈希。起初我了解到散列是无序的,这是有道理的,但现在我发现散列是与更高版本的Ruby一起订购的。我真的不明白为什么或这背后的概念。

我能否了解有序哈希的用途?对于常规哈希与有序哈希,可能的用例也会很好。

3 个答案:

答案 0 :(得分:4)

有些人喜欢依赖Hash的排序,因为ordered-hash会记住键/值对的插入顺序。这允许程序员使用类似于队列的散列,随机访问与键相关联的值。如果他们打算在运行中更改值然后迭代队列的键/值对以再次按插入顺序检索它们,这将非常有用。

此外,他们可以提供符号名称,而不必像在使用基于阵列的队列时那样将索引提供到队列中,而不是必须提供符号名称。

而不是:

queue[0]

他们可以使用:

queue[:fred]

这是我能看到的有序哈希的唯一用例;使用保留插入顺序的密钥队列复制功能非常容易。

答案 1 :(得分:3)

回顾Matz之前的一些帖子,他对于为什么实施这个帖子非常模糊。查看https://www.ruby-forum.com/topic/166075

他基本上说它的实施是为了适应一些边缘情况,但他似乎并没有详细阐述它。他还表示,对性能没有任何影响,只是内存消耗的增长可以忽略不计。

答案 2 :(得分:0)

想象一下git提交,由ruby git包装器处理。它们可能是Hash的实例,其中sha为关键字。虽然Date的排序使它们易于以人性化的方式进行迭代。