2010-04-24 33 views

回答

4

在您的标题中,您提到您希望获取按其各自键排序的数组值。但在你的例子中,你实际上只是对值进行排序,而不管键。

如果这是你想要什么,只需使用:

test.values.sort 

但是,如果你要基于键的值进行排序,使用此:

test.keys.sort.collect {|k| test[k]} 
2
test.values.sort.join(' ') 
0
test.sort_by(&:first).map(&:last).join(' ') 

不幸的是,红宝石没有按没有用于表示Hash条目(键值对)的类,而只是使用两元素数组。如果红宝石确实有键值对专用类,这将是不透明的要少得多:

test.sort_by(&:key).map(&:value).join(' ') 

,当然,这Enumerable#sort_by返回Array的事实,也挺可惜的。如果它返回SortedMap或类似的东西,它会更好:

test.sort_by(&:key).values.join(' ')