我的输入哈希:h = { "a" => 20, "b" => 30, "c" => 10 }

升序排序:h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

但是,我需要[["b", 30], ["a", 20], ["c", 10]]

我们如何才能让它反过来运行,<=>是什么意思?

推荐答案

你可以同时让它更干净、更清晰、更快!这样地:

h.sort_by {|k,v| v}.reverse

我用随机值对1000个元素的散列进行了3000次迭代排序,并获得了以下时间:

h.sort {|x,y| -(x[1]<=>y[1])} -- 16.7s
h.sort {|x,y| y[1] <=> x[1]} -- 12.3s
h.sort_by {|k,v| -v} -- 5.9s
h.sort_by {|k,v| v}.reverse -- 3.7

Ruby相关问答推荐

有没有办法把条件语句写得更干净?

使用 Ruby,我如何访问和比较这些嵌套的数组值?

如何从 DateTime 值中删除区域?

冒号:和粗箭头=>有什么区别

Ruby $:.unshift File.dirname(__FILE__)

Ruby 对象打印为指针

Ruby:如何判断字符是大写还是小写

从索引到字符串结尾的子字符串的Ruby成语

Ruby 中的排序稳定吗?

如何从最后一个元素开始遍历数组?

无法正确自动生成 Ruby DevKit 配置文件

我可以使用 `else if` 而不是 `elsif` 吗?

用 Ruby 解析 XML

使用 Ruby 将大写字符串转换为标题大小写

当我将参数传递给脚本时,使用 gets() 会出现没有这样的文件或目录错误

带有添加和删除参考的 Rails 迁移

为什么这个 Ruby 对象同时具有 to_s 和 inspect 似乎做同样事情的方法?

Python 中的一切都像 Ruby 一样是对象吗?

如何在没有 RVM 的 Ubuntu 上安装 Ruby 2

如何在 Ruby 中实现回调?