如何按值对散列进行排序
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才需要。
另一答案
哈希是键值对的集合。它类似于数组,索引是通过任何对象类型的任意键完成的,不是整数索引。[您遍历哈希的顺序键或值似乎是任意的
另一答案
您的描述是错误的。以上是关于如何按值对散列进行排序的主要内容,如果未能解决你的问题,请参考以下文章