Как получить порядок (ранг) каждого элемента в списке? - PullRequest
0 голосов
/ 26 апреля 2020

Например, список [5,1,6,7,9] Я хочу получить порядок каждого элемента: [1 0 2 3 4] Это просто для python, но как это сделать в netlo go?

ps Я спешу за домашней работой. Если вы знаете решение, пожалуйста, ответьте в ближайшее время! Большое спасибо!

1 Ответ

1 голос
/ 27 апреля 2020

С риском сделать кому-то домашнее задание для них, вот как я бы справился с этим. Сначала поймите, что если мы отсортируем список, индексы полученного списка будут теми «рангами», которые мы хотим получить в нашем конечном результате. Вы можете получить индекс числа из списка, используя примитив position . Затем мы можем легко использовать примитив map для замены каждого значения в исходном списке на «ранг» из отсортированного массива.

Пошаговый пример:

to step-by-step-ranking
  let items [5 1 6 7 9]
  let sorted sort items 
  ; sorted is now [1 5 6 7 9]
  show sorted

  ; so the `position` of the number 5 in `sorted` is index `1`
  show position 5 sorted 
  ; and the `position` of the number 5 in `sorted` is index `0`
  show position 1 sorted
  ; and so on for the other items, `position` gives our rank

  ; so we just need to do `position n sorted` for each number in order
  ; which is what `map` will do for us
  ; `map` to `position` from `sorted` for each number in `items`
  let ranked map [ n -> position n sorted ] items   
  show ranked ; outputs [1 0 2 3 4]
end

И если вам нужен репортер более общего назначения, вы можете использовать любой список чисел:

to-report rank [items]
  let sorted sort items
  let ranked map [ n -> position n sorted ] items
  report ranked
end

to test-rank
  show rank [5 1 6 7 9] ; outputs [1 0 2 3 4]
  show rank [ 10 9 3 2 10 9 3 2 11 ] ; outputs [6 4 2 0 6 4 2 0 8]
end
...