首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Ruby中不转换为数组的情况下按数值对哈希进行排序?

如何在Ruby中不转换为数组的情况下按数值对哈希进行排序?
EN

Stack Overflow用户
提问于 2012-08-16 02:26:33
回答 3查看 1.2K关注 0票数 4

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2012-08-16 02:38:13

在Ruby1.9中,"Hashes enumerate their values in the order that the corresponding keys were inserted",所以只需确保以正确的方式插入它们:

代码语言:javascript
代码运行次数:0
运行
复制
Hash[h.sort_by { |_, v| -v }]
#=> > {"apple"=>812, "spider"=>213, "frog"=>128}
票数 5
EN

Stack Overflow用户

发布于 2012-08-16 04:30:37

您需要对散列本身进行排序,还是只按排序顺序对其内容进行操作?如果是后者,那么下面的代码片段将会起作用:

代码语言:javascript
代码运行次数:0
运行
复制
myhash.keys.sort.each { |k| .... do something with myhash[k] .... }

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

代码语言:javascript
代码运行次数:0
运行
复制
Hash[myhash.sort]

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

票数 2
EN

Stack Overflow用户

发布于 2012-08-16 02:39:14

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11974927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档