br-*_*-01 -1 clojure sequence seq
我对像这样的元素有一个序列
([:Jon 326] [:Mary 233] [:Matthew 255])
并希望以一种巧妙的方式将此序列转换为类似
{{:name Jon :rank 1} {:name Matthew :rank 2} {:name Mary :rank 3}}
:name应该是字符串类型,而:rank应该是整数
排名是由数字计算得出的,与序列中元素中的其他元素相比,“点”越高,排名越高
您可以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))
Run Code Online (Sandbox Code Playgroud)
或者您可以使用thread-last宏:
(->> input
(sort-by second >)
(map-indexed (fn [idx p] {:name (name (first p)) :rank (inc idx)})))
Run Code Online (Sandbox Code Playgroud)
您也可以将函数中的线对解构为,map-indexed
而不是使用first
:
(->> input
(sort-by second >)
(map-indexed (fn [idx [n _]] {:name (name n) :rank (inc idx)})))
Run Code Online (Sandbox Code Playgroud)