我有一个哈希:{"spider" => 213, "frog" => 128, "apple" => 812}
。
如何重新排序,以便按降序排序值而不将其转换为数组?因此,将其更改为{"apple" => 812, "spider" => 213, "frog" => 128}
而不将其更改为数组。
我尝试了.sort_by
,但将其转换为数组。
答案 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没有故意将散列方法添加到哈希中,我读了他关于这个主题的帖子......