2015-08-23 2 views

ответ

3
min = arr.sort 
# => [[1, 0], [1, 1], [2, 0], [2, 1]] 
max = min.reverse 
# => [[2, 1], [2, 0], [1, 1], [1, 0]] 

Если производительность является проблемой, а не простота, то следующий может быть использован.

min = arr.sort_by(&:itself) 
+0

[Тесты] (http://stackoverflow.com/questions/2642182/sorting-an-array-in-descending-order-in-ruby/2651028#2651028) показывают, что сортировка затем с помощью 'reverse' быстрее, чем использование отрицательного значения, так что +1. –

+0

В v2.2 + вы можете использовать [Array # max] (http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-max), чтобы получить 'max':' arr. max (arr.size) # => [[2, 1], [2, 0], [1, 1], [1, 0]] ' –

+0

@CarySwoveland Гарантирован ли заказ в любом документе? – sawa

1

Это хороший прецедент для Enumerable#sort_by.

Для макс:

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