Подтвердить что ты не робот

Сортировка двумерного массива по второму значению

Хорошо, скажем, у меня есть массив, подобный этому [[z, 1], [d, 3], [e, 2]], как я могу отсортировать этот массив по второму элементу каждого составного массива? Чтобы мой массив выглядел следующим образом? [[z, 1], [e, 2], [d, 3]]?

4b9b3361

Ответ 1

arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}
# => [[:z, 1], [:e, 2], [:d, 3]]

Или, как указывает пользователь @Phrogz, если внутренние массивы имеют ровно два элемента:

arr.sort_by{|x,y|y} # => [[:z, 1], [:e, 2], [:d, 3]]
arr.sort_by(&:last) # => [[:z, 1], [:e, 2], [:d, 3]]

Ответ 2

Как пользователь maerics отвечает, он обеспечивает сортировку по возрастанию. Этот ответ очень полезен для меня. Для сортировки по убыванию использую -

arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}.reverse
#=> [[:d, 3], [:e, 2], [:z, 1]]