我有一个哈希:{"spider" => 213, "frog" => 128, "apple" => 812}
。
如何重新排序,以便按降序对值进行排序而不将其转换为数组?因此,将其更改为{"apple" => 812, "spider" => 213, "frog" => 128}
而不将其变为数组。
我已经尝试过.sort_by
,但是将它转换为数组。
在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}
您是否需要对哈希本身进行排序,或者只是按排序顺序对其内容进行操作?如果是后者,那么这个片段就可以了:
myhash.keys.sort.each { |k| .... do something with myhash[k] .... }
我能看到的唯一方法是使用中间数组,除了简单地按排序顺序填充哈希值之外,
Hash[myhash.sort]
但是,作为程序员,你不会“看到”中间状态。在散列上使用sort方法将散列转换为排序的数组数组,#[]方法将数组强制转换为散列。至少在Ruby-1.9.3上。
所以问题并非无关紧要。但为什么?重新排序是什么意思?在哪里重新订购?无论你做什么,你都必须以某种方式从哈希中提取值。你为什么害怕阵列?你知道小哈希现在在Ruby中实现为数组吗? (或者会是2.0?)Matz没有故意将散列方法添加到哈希中,我读了他关于这个主题的帖子......