在clojure中对序列中的元素进行排序

在clojure中对序列中的元素进行排序,clojure,sequence,seq,Clojure,Sequence,Seq,我有一个元素序列,比如 ([:Jon 326][:Mary 233][:Matthew 255]) 我想用一种聪明的方式把这个序列转换成一张地图 {{:姓名Jon:rank 1}{:姓名Matthew:rank 2}{:姓名Mary:rank 3} :name应为字符串类型且:rank应为整数 秩通过数字计算,与序列中的其他元素相比,“点”越高,秩越高您可以使用排序依据对输入序列排序,然后使用映射索引将其转换为秩: (def input '([:Jon 326] [:Mary 233] [:Ma

我有一个元素序列,比如
([:Jon 326][:Mary 233][:Matthew 255])

我想用一种聪明的方式把这个序列转换成一张地图
{{:姓名Jon:rank 1}{:姓名Matthew:rank 2}{:姓名Mary:rank 3}

:name应为字符串类型且:rank应为整数


秩通过数字计算,与序列中的其他元素相比,“点”越高,秩越高

您可以使用
排序依据
对输入序列排序,然后使用
映射索引
将其转换为秩:

(def input '([:Jon 326] [:Mary 233] [:Matthew 255]))

(map-indexed (fn [idx p]
               {:name (name (first p))
                :rank (inc idx)})
             (sort-by second > input))
或者,您可以使用thread last宏:

 (->> input 
      (sort-by second >) 
      (map-indexed (fn [idx p] {:name (name (first p)) :rank (inc idx)})))
您还可以在函数中将该对分解为
映射索引的
,而不是使用
第一个

(->> input 
     (sort-by second >) 
     (map-indexed (fn [idx [n _]] {:name (name n) :rank (inc idx)})))

结果映射包含
:rank
键多次-是否需要一系列映射,例如
({:name Jon:rank 1}{:name Matthew:rank 2}{:name Mary:rank 3})
?是否要将
:name
值作为符号?
:rank
值是如何计算的?很抱歉在写入映射时出错,它必须是一系列映射。:name键应该是一个字符串,并且:rank os是根据序列中的数字计算出来的,例如([:Jon 255][:Mary 150])Jon是rank 1和Mary rank 2,因为Jon有255个点和Mary 150points@br-baker-01您应该编辑问题。@AmanuelNega感谢您帮助编辑问题以澄清问题