Как вернуть индексы, указывающие положение от самых больших до самых маленьких целых чисел в Ruby - PullRequest
3 голосов
/ 27 января 2020

Предположим, у меня есть массив уникальных целых чисел, который содержит 9 элементов.

array = [3,5,7,9,2,4,8,1,6] 

Как мне вернуть массив индексов, которые сообщают мне позицию исходного массива целых чисел от наибольшего к наименьшему?

index_of_largest_to_smallest = [3,6,2,8,1,5,0,4,7]

Так что это скажет мне, что наибольшее число в позиции 3, а второе по величине в позиции 6 и т. Д. c.

Я пытался array.sort, но это вроде массив от самого большого до самого маленького. Я также попытался array.each_with_index, но не смог заставить его вернуть другой массив.

Ответы [ 2 ]

9 голосов
/ 27 января 2020

Через each_with_index, sort, map, last и reverse :

[3,5,7,9,2,4,8,1,6].each_with_index   #=> [[3, 0], [5, 1], [7, 2], [9, 3], [2, 4], [4, 5], [8, 6], [1, 7], [6, 8]]
                   .sort              #=> [[1, 7], [2, 4], [3, 0], [4, 5], [5, 1], [6, 8], [7, 2], [8, 6], [9, 3]]
                   .map(&:last)       #=> [7, 4, 0, 5, 1, 8, 2, 6, 3]
                   .reverse           #=> [3, 6, 2, 8, 1, 5, 0, 4, 7]
5 голосов
/ 27 января 2020
array.each_index.sort_by { |i| -array[i] }
  #=> [3, 6, 2, 8, 1, 5, 0, 4, 7]

См. Форму Array # each_index и Enumerable # sort_by . Обратите внимание, что Array#each_index возвращает перечислитель, когда, как и здесь, блок не указан.

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