按两个值对数组进行排序

时间:2010-01-27 01:36:08

标签: ruby

假设我有

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

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

最可读的方式是什么?

3 个答案:

答案 0 :(得分:13)

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

 an_array.sort

答案 1 :(得分:8)

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

e.g。按第二个元素排序,然后按第一个元素排序

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]]

答案 2 :(得分:1)

an_array.sort