按两个值对数组进行排序

假设我有

an_array = [[2, 3], [1, 4], [1, 3], [2, 1], [1, 2]] 

我想按每个内部数组的第一个值排序这个数组,然后按第二个排序(因此排序后的数组应如下所示: [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3]]

最可读的方法是什么?

这是排序数组的默认行为(有关certificate,请参阅Array#<=>方法定义)。 你应该能够做到:

  an_array.sort 

如果您想要一些非默认行为,请调查sort_by (ruby 1.8.7+)

例如按第二个元素排序,然后按第一个元素排序

 a.sort_by {|e| [e[1], e[0]]} # => [[2, 1], [1, 2], [1, 3], [2, 3], [1, 4]] 

或者按第一个元素升序排序,然后按第二个元素降序排序

 a.sort_by {|e| [e[0], -e[1]]} # => [[1, 4], [1, 3], [1, 2], [2, 3], [2, 1]] 

an_array.sort