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

问题描述 投票:3回答:3

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

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

我已经尝试过.sort_by,但是将它转换为数组。

ruby sorting hash
3个回答
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}

2
投票

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

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

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

Hash[myhash.sort]

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.