使用键的值对哈希进行排序

时间:2012-04-19 20:43:18

标签: ruby

我有这样的哈希:

a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }

我想根据那里的值对这个哈希进行排序,即:3,6,2,10

我可以a.values.sort

但它返回一个只有排序值的数组。我想对实际的哈希进行排序,所以它应该返回一个新的哈希值(或理想情况下用已排序的哈希值更新原始哈希值)和所有相同的键值对但排序!!

2 个答案:

答案 0 :(得分:5)

这适用于Ruby 1.9:

a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }
p Hash[a.sort_by{|k,v| v}]
#=> {13=>2, 29=>3, 14=>6, 32=>10}

答案 1 :(得分:2)

Ruby中的Hash(1.9之前版本)未分类。您不能'返回具有相同键值对排序的新哈希',因为哈希实现不会保持条目的排序。您有两种选择:

  1. 使用ActiveSupport :: OrderedHash的实例(来自active_support gem)
  2. 使用排序对数组来执行需要排序输入的任何操作。通过将该数组传递给Hash构造函数(Hash.new或Hash [])转换回Hash