在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感谢您帮助编辑问题以澄清问题