Arrays 按多个条件对数组排序

Arrays 按多个条件对数组排序,arrays,ruby,sorting,Arrays,Ruby,Sorting,我有一系列的要点: arr = [[2,0], [1,0], [2,1], [1,1]] 我将如何按照降序和升序对元素进行排序,先按x排序,然后再按类似x值的y值排序 max = [[2,1], [2,0], [1,1], [1,0]] min = [[1,0], [1,1], [2,0], [2,1]] 这是一个很好的使用案例 对于max: arr.sort_by { |el| [-el[0], -el[1]] } => [[2, 1], [2, 0], [1, 1], [1, 0

我有一系列的要点:

arr = [[2,0], [1,0], [2,1], [1,1]]
我将如何按照降序和升序对元素进行排序,先按x排序,然后再按类似x值的y值排序

max = [[2,1], [2,0], [1,1], [1,0]]
min = [[1,0], [1,1], [2,0], [2,1]]

这是一个很好的使用案例

对于max:

arr.sort_by { |el| [-el[0], -el[1]] }
=> [[2, 1], [2, 0], [1, 1], [1, 0]]
最低:

arr.sort_by { |el| [el[0], el[1]] }
=> [[1, 0], [1, 1], [2, 0], [2, 1]]
如果性能是一个问题,而不是简单性,那么可以使用以下方法

min = arr.sort_by(&:itself)

显示排序然后使用
reverse
比使用否定值快,所以+1。在v2.2+中,您可以使用来获得
max
arr.max(arr.size)#=>[[2,1],[2,0],[1,1],[1,0]
@CarySwoveland在任何文档中都可以保证顺序吗?我也在想知道这一点。虽然我没有看到任何东西,但我希望它能复制
sort.reverse
。一个小实验:
n=10**6;a=(0..n)。与a相反;将a.shuffle.max(a.size)==a#=>设置为true
。类似于
min
min\u by
max\u by
min = arr.sort_by(&:itself)