Как отсортировать элементы массива в лексикографическом порядке в Ruby - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть массив

arr = [[1,2],[2,3],[2,1],[0,1]]

Я бы хотел, чтобы они были в следующем порядке:

arr = [[0,1],[1,2],[2,1],[2,3]]

Я бы хотел использовать для этого метод sort_by Руби.Как я могу отсортировать массив массивов на двух уровнях в Ruby следующим образом?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Array#sort сортирует под-массивы лексикографически по умолчанию (см. Array#<=>).Вам не нужно ничего определять:

[[1,2],[2,3],[2,1],[0,1]].sort
# => [[0, 1], [1, 2], [2, 1], [2, 3]]

Если вы действительно хотите использовать sort_by:

[[1,2],[2,3],[2,1],[0,1]].sort_by(&:itself)
# => [[0, 1], [1, 2], [2, 1], [2, 3]]
0 голосов
/ 16 февраля 2019

Если вы считаете каждый элемент подмассива цифрой от 0 до 9, вы можете использовать Array#sort_by, где блок преобразует массив в строку, а затем в целое число:

arr.sort_by { |e| e.join.to_i }

#=> [[0, 1], [1, 2], [2, 1], [2, 3]]


Как это работает.
[1, 2].join #=> "12"
[1, 2].join.to_i #=> 12


В данном случае:
arr = [[1,0,2,0],[2,3],[2,1],[0,1]]
#=> [[0, 1], [2, 1], [2, 3], [1, 0, 2, 0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...