以下是我正在做的事情:
test = {
'd' => 20,
'b' => 40,
'c' => 30,
'a' => 50,
'e' => 10
}
f = []
test.to_a.sort.each do |e|
f << e[1]
end
puts f.join(' ')
输出:
50 40 30 20 10
有更高效/简洁/更好的方法吗?在有人这样说之前,不,我不能使用数组。 :P
编辑抱歉,发错了代码。
答案 0 :(得分:4)
在标题中,您提到要获取按其各自键排序的数组值。但在您的示例中,您实际上只是对值进行排序,而不管键。
如果这是你想要的,只需使用:
test.values.sort
但是如果你想根据键对值进行排序,请使用:
test.keys.sort.collect {|k| test[k]}
答案 1 :(得分:2)
test.values.sort.join(' ')
答案 2 :(得分:0)
test.sort_by(&:first).map(&:last).join(' ')
不幸的是,Ruby没有用于表示Hash
条目(键值对)的类,而只是使用了一个双元素数组。如果Ruby 有一个专门的键值对类,那么这将不那么透明:
test.sort_by(&:key).map(&:value).join(' ')
当然,Enumerable#sort_by
返回Array
的事实也是非常不幸的。如果它返回SortedMap
或类似的东西,它会更好:
test.sort_by(&:key).values.join(' ')