Я хорошо прочитал раздел «Функции сортировки» руководства Julia и взглянул на некоторые из подобных вопросов, которые уже задавались на этой доске, но я не думаю, что нашел ответ на мой вопрос. Извиняюсь, если что-то пропустил.
По существу, у меня есть вектор векторов с вложенными векторами, содержащими целые числа. Для целей примера каждый заключенный вектор содержит 3 целых числа, но это может быть любое число. Я хочу отсортировать вложенные векторы по первому элементу, затем по второму элементу, затем по третьему элементу и т. Д.
Начнем с вектора:
v = [[3, 6, 1], [2, 2, 6], [1, 5, 9], [2, 1, 8], [3, 7, 9],
[1, 1, 2], [2, 2, 2], [3, 6, 2], [1, 2, 5], [1, 5, 6],
[3, 7, 4], [2, 1, 4], [2, 2, 1], [3, 1, 2], [1, 2, 8]]
И продолжайте с тем, что я на самом деле ищу:
v = [[1, 1, 2], [1, 2, 5], [1, 2, 8], [1, 5, 6], [1, 5, 9],
[2, 1, 4], [2, 1, 8], [2, 2, 1], [2, 2, 2], [2, 2, 6],
[3, 1, 2], [3, 6, 1], [3, 6, 2], [3, 7, 4], [3, 7, 9]]
Так что не должно быть никаких требований к ракетостроению.
Я могу легко отсортировать вектор по первому элементу вложенных векторов одним из двух способов:
v = sort(v, lt = (x, y) -> isless(x[1], y[2]))
или
v = sort(v, by = x -> x[1])
Оба эти метода дают один и тот же ответ:
v = [[1, 5, 9], [1, 1, 2], [1, 2, 5], [1, 5, 6], [1, 2, 8],
[2, 2, 6], [2, 1, 8], [2, 2, 2], [2, 1, 4], [2, 2, 1],
[3, 6, 1], [3, 7, 9], [3, 6, 2], [3, 7, 4], [3, 1, 2]]
Итак, как вы можете видеть, я отсортировал по первому элементу вложенных векторов, но не по последующим элементам.
Итак, чтобы вернуться к вопросу в заголовке, существует ли метод сортировки по нескольким элементам с использованием функции sort()
?
Я могу получить то, что хочу, используя циклы:
for i = 3:-1:1
v = sort(v, lt = (x, y) -> isless(x[i], y[i]))
end
или
for i = 3:-1:1
v = sort(v, by = x -> x[i])
end
Однако я не хочу заново изобретать колесо, поэтому, если есть способ сделать это в функции sort()
, я бы хотел узнать об этом.