按二次值排序二维数组

时间:2011-08-11 22:31:08

标签: ruby arrays

好吧,我说我有一个像[[z,1],[d,3],[e,2]]这样的数组,我怎么能用每个组成数组的第二个元素对这个数组进行排序?所以我的数组看起来如下? [[z,1],[e,2],[d,3]]?

2 个答案:

答案 0 :(得分:38)

arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}
# => [[:z, 1], [:e, 2], [:d, 3]]

或者正如用户@Phrogz指出的那样,如果内部数组恰好有两个元素:

arr.sort_by{|x,y|y} # => [[:z, 1], [:e, 2], [:d, 3]]
arr.sort_by(&:last) # => [[:z, 1], [:e, 2], [:d, 3]]

答案 1 :(得分:1)

作为用户maerics的答案,它提供升序排序。这个答案对我非常有用,谢谢。 对于降序排序我使用 -

arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}.reverse
#=> [[:d, 3], [:e, 2], [:z, 1]]