我有一个散列:{"spider" => 213, "frog" => 128, "apple" => 812}
。
我如何重新排序,使其按值降序排序,而不将其转换为数组?因此,将其更改为{"apple" => 812, "spider" => 213, "frog" => 128}
,而不将其转换为数组。
我尝试过.sort_by
,但这会将其转换为数组。
发布于 2012-08-16 02:38:13
在Ruby1.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}
发布于 2012-08-16 04:30:37
您需要对散列本身进行排序,还是只按排序顺序对其内容进行操作?如果是后者,那么下面的代码片段将会起作用:
myhash.keys.sort.each { |k| .... do something with myhash[k] .... }
除了以排序的顺序简单地填充散列之外,我能看到的唯一方法是使用中间数组:
Hash[myhash.sort]
但是,作为程序员,您并没有“看到”中间状态。在散列上使用sort方法将散列转换为已排序的数组数组,#[]方法将该数组强制为散列。至少在Ruby-1.9.3上。
发布于 2012-08-16 02:39:14
所以这个问题不是无关紧要的。但是,为什么?你说的重新排序是什么意思?就地重新排序?无论您做什么,您都必须以某种方式从散列中提取这些值。你为什么害怕数组?你知道吗,在Ruby中,小散列现在被实现为数组。(或者将在2.0中出现?)Matz故意克制住没有给散列添加排序方法,我读了他关于这个主题的帖子……
https://stackoverflow.com/questions/11974927
复制相似问题