4

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

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

我试过.sort_by了,但这会将其转换为数组。

4

3 回答 3

5

在 Ruby 1.9 中,“哈希按照插入相应键的顺序枚举它们的值”,因此只需确保以正确的方式插入它们:

Hash[h.sort_by { |_, v| -v }]
#=> > {"apple"=>812, "spider"=>213, "frog"=>128}
于 2012-08-15T18:38:13.240 回答
2

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

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

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

Hash[myhash.sort]

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

于 2012-08-15T20:30:37.057 回答
-1

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

于 2012-08-15T18:39:13.830 回答