【发布时间】:2012-05-01 11:03:00
【问题描述】:
我有一个这样的哈希:
a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }
我想根据那里的值对这个哈希进行排序,即:3,6,2,10
我可以a.values.sort
但它返回一个仅包含排序值的数组。我想对实际的散列进行排序,所以它应该返回一个新的散列(或者最好用排序后的散列更新原始散列),其中包含所有相同的键值对但已排序!!
【问题讨论】:
标签: ruby
我有一个这样的哈希:
a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }
我想根据那里的值对这个哈希进行排序,即:3,6,2,10
我可以a.values.sort
但它返回一个仅包含排序值的数组。我想对实际的散列进行排序,所以它应该返回一个新的散列(或者最好用排序后的散列更新原始散列),其中包含所有相同的键值对但已排序!!
【问题讨论】:
标签: ruby
这适用于 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}
【讨论】:
Hash[a.invert.sort].invert
sort_by 比inverting 两次要好得多。
Ruby(1.9 之前)中的哈希是未排序的。您不能“返回具有相同排序的键值对的新哈希”,因为哈希实现根本不保持条目排序。你有两个选择:
【讨论】: