按两个值对数组进行排序

Tom*_*man 7 ruby

假设我有

an_array = [[2, 3], [1, 4], [1, 3], [2, 1], [1, 2]]
Run Code Online (Sandbox Code Playgroud)

我要排序此阵列由每个内阵列的所述第一值,然后由第二(所以排序后的数组应该是这样的:[[1, 2], [1, 3], [1, 4], [2, 1], [2, 3]])

最可读的方法是什么?

Ale*_*ner 13

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

 an_array.sort
Run Code Online (Sandbox Code Playgroud)


gle*_*man 8

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

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

a.sort_by {|e| [e[1], e[0]]}  # => [[2, 1], [1, 2], [1, 3], [2, 3], [1, 4]]
Run Code Online (Sandbox Code Playgroud)

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

a.sort_by {|e| [e[0], -e[1]]}  # => [[1, 4], [1, 3], [1, 2], [2, 3], [2, 1]]
Run Code Online (Sandbox Code Playgroud)