Вы можете использовать sort-by
, чтобы упорядочить последовательность ввода, а затем использовать map-indexed
, чтобы преобразовать ее в ранг:
(def input '([:Jon 326] [:Mary 233] [:Matthew 255]))
(map-indexed (fn [idx p]
{:name (name (first p))
:rank (inc idx)})
(sort-by second > input))
или вы можете использовать макрос последнего потока:
(->> input
(sort-by second >)
(map-indexed (fn [idx p] {:name (name (first p)) :rank (inc idx)})))
вы также можете деструктурировать пару в функции до map-indexed
вместо использования first
:
(->> input
(sort-by second >)
(map-indexed (fn [idx [n _]] {:name (name n) :rank (inc idx)})))