按二次值排序二维数组

Ric*_*kes 22 ruby arrays

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

mae*_*ics 39

arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}
# => [[:z, 1], [:e, 2], [:d, 3]]
Run Code Online (Sandbox Code Playgroud)

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

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

  • 或者更简单:`arr.sort_by {| s,n | n}`甚至`arr.sort_by(&:last)`(在Ruby 1.9中). (13认同)
  • `arr.sort_by(&:last)`也适用于Ruby 1.8.7. (2认同)