3

我有一个这样的哈希:

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

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

我可以a.values.sort

但它返回一个仅包含排序值的数组。我想对实际的散列进行排序,因此它应该返回一个新的散列(或者理想情况下用排序的散列更新原始散列),其中包含所有相同的键值对但已排序!!

4

2 回答 2

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}
于 2012-04-19T20:50:01.343 回答
2

Ruby 中的哈希(1.9 之前)是未排序的。您不能“返回具有相同键值对排序的新哈希”,因为哈希实现根本不会保持条目排序。你有两个选择:

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