如何在Ruby中按数值对哈希进行排序而不转换为数组?

时间:2012-08-15 18:26:33

标签: ruby sorting hash

我有一个哈希:{"spider" => 213, "frog" => 128, "apple" => 812}

如何重新排序,以便按降序排序值而不将其转换为数组?因此,将其更改为{"apple" => 812, "spider" => 213, "frog" => 128}而不将其更改为数组。

我尝试了.sort_by,但将其转换为数组。

3 个答案:

答案 0 :(得分:5)

在Ruby 1.9中,“Hashes enumerate their values in the order that the corresponding keys were inserted”,所以请确保以正确的方式插入它们:

Hash[h.sort_by { |_, v| -v }]
#=> > {"apple"=>812, "spider"=>213, "frog"=>128}

答案 1 :(得分:2)

您是否需要对哈希本身进行排序,或者只是按排序顺序对其内容进行操作?如果是后者,那么这个片段就可以了:

myhash.keys.sort.each { |k| .... do something with myhash[k] .... }

除了简单地按排序顺序填充哈希之外,我能看到的唯一方法是使用中间数组:

Hash[myhash.sort]

但是,作为程序员,你并没有“看到”中间状态。在散列上使用sort方法将散列转换为排序的数组数组,#[]方法将数组强制转换为散列。至少在Ruby-1.9.3上。

答案 2 :(得分:-1)

所以问题并非无关紧要。但为什么?重新排序是什么意思?在哪里重新订购?无论你做什么,你都必须以某种方式从哈希中提取值。你为什么害怕阵列?你知道小哈希现在在Ruby中实现为数组吗? (或者是2.0?)Matz没有故意将散列方法添加到哈希中,我读了他关于这个主题的帖子......