如何按值对散列进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何按值对散列进行排序相关的知识,希望对你有一定的参考价值。

我试图按值对特定的哈希排序。我遇到了使用方法sort_by的方法。但是,即使我在散列上调用sort_by,它也会返回一个数组,即:

a = {}
a[0] = "c"
a[1] = "b"
a[2] = "a"
a.sort_by{|key, value| value}
# => [[2, "a"], [1, "b"], [0, "c"]]

如果我尝试将结果转换为哈希,则最终会得到按键排序的哈希,因此sort_by的全部目的都将丢失。即:

a = {}
a[0] = "c"
a[1] = "b"
a[2] = "a"
Hash[*a.sort_by{|key, value| value}.flatten]
# => {0=>"c", 1=>"b", 2=>"a"}

是否有一种方法可以按值对散列进行排序,然后以散列的形式返回结果?

我正在使用1.8.6红宝石

答案
您可以将ActiveSupport::OrderedHash用于Ruby 1.8:

ActiveSupport::OrderedHash实现一个保留插入顺序的哈希,就像在Ruby 1.9中一样

我没有运行1.8.6,但这应该可以工作:

ActiveSupport::OrderedHash

如上所述,在Ruby 1.9中为哈希值

“以插入相应键的顺序枚举其值”,因此只有Ruby 1.8才需要。

另一答案
哈希是键值对的集合。它类似于数组,索引是通过任何对象类型的任意键完成的,不是整数索引。

[您遍历哈希的顺序键或值似乎是任意的

另一答案
您的描述是错误的。

以上是关于如何按值对散列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 6 中对散列进行排序

如何使用 R ggplot 按值对条形图进行排序? [复制]

如何按值对 STL 映射进行排序?

如何在 JavaScript 中按值对地图进行排序?

如何按值对计数器进行排序? - Python

如何按值对 Python 字典进行排序? [复制]