Сортировка массива с использованием пользовательских предпочтений сортировки с m предпочтениями и n элементами, равными m <n - PullRequest
0 голосов
/ 27 мая 2020

Итак, у меня есть этот массив:

countries = ["Venezuela", "Colombia", "Peru", "USA", "Germany", "France", "Portugal"]

, и мне нужен результат, равный result [0] и result [1], такой же, как в постоянном ORDER, как показано ниже:

ORDER = ["USA", "Colombia"]
result = ["USA", "Colombia", "France", "Germany", "Peru", "Portugal", "Venezuela"]

The Ближайший вопрос, который я нашел, таков: Сортировка массива с использованием настраиваемых параметров сортировки? но m == n, и мне нужно m

Ищу краткий ответ, потому что любой может сделать это в 4 или более строках.

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Если countries всегда содержит одни и те же элементы в ORDER, вы можете попробовать с -, + и sort:

ORDER + (countries - ORDER).sort
# ["USA", "Colombia", "France", "Germany", "Peru", "Portugal", "Venezuela"]
0 голосов
/ 27 мая 2020

Вы можете использовать

countries.sort_by { |x| ORDER.index(x) || ORDER.count }
# => ["USA", "Colombia", "Venezuela", "Peru", "Germany", "France", "Portugal"]

Это сортирует страны по их индексу ( Array # index ) в ORDER, а для стран, которых нет в списке, это просто присваивает им фиктивный индекс ORDER.count, который, как мы знаем, будет больше, чем другие индексы (и, следовательно, будет в конце результата)

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