как отсортировать массив массивов по трем или более элементам (ruby) - PullRequest
4 голосов
/ 07 февраля 2010

У меня есть CSV-файл с 14 столбцами, и я хочу отсортировать его в ruby ​​по 6-му столбцу, затем по 2-му и затем по 11-му столбцу.

Есть хороший метод .sort_by, но он работает только для двух столбцов, не так ли? И array_of_arrays.sort_by {|e| [e[2], e[0],e[1]],} не работает.

так скажем, в приведенном ниже примере я хочу, чтобы он был отсортирован по 3-му, 1-му, 2-му столбцам

array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,'b'], [1,3,'a'], [2,1,'b']]

array_of_arrays.each {|line| puts line.inspect }
puts
array_of_arrays.sort_by {|e| [e[2], e[0]]} .each {|line| puts line.inspect }

но результат не такой, как хотелось бы

[1, 9, "a"]
[2, 2, "a"]
[2, 6, "b"]
[1, 3, "a"]
[2, 1, "b"]

[1, 9, "a"]
[1, 3, "a"]
[2, 2, "a"]
[2, 6, "b"]
[2, 1, "b"]

1 Ответ

9 голосов
/ 07 февраля 2010

Это:

array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,'b'], [1,3,'a'], [2,1,'b']]

array_of_arrays.each {|line| p line }
puts
array_of_arrays.sort_by {|e| [e[2], e[0], e[1]]} .each {|line| p line }

Создает для меня следующий вывод:

[1, 3, "a"]
[1, 9, "a"]
[2, 2, "a"]
[2, 1, "b"]
[2, 6, "b"]

Это то, что вы хотите, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...