我需要将max运算符应用于以下列表
[Tier20 Tier10 Tier30]
Run Code Online (Sandbox Code Playgroud)
它应该给我
Tier30
Run Code Online (Sandbox Code Playgroud)
预定义的有序列表(从低到高)是
[Tier5 Tier10 Tier20 Tier30 Tier40 Tier50]
Run Code Online (Sandbox Code Playgroud)
在Clojure中实现这一目标的最佳方法是什么?
首先定义排序:
user> (def order '[Tier5 Tier10 Tier20 Tier30 Tier40 Tier50])
#'user/order
Run Code Online (Sandbox Code Playgroud)
然后我们将订单映射到可以通过创建a来排序的东西 map
user> (def order-map (zipmap order (range)))
{Tier50 5, Tier40 4, Tier30 3, Tier20 2, Tier10 1, Tier5 0}
Run Code Online (Sandbox Code Playgroud)
如果您需要的是最大/最小值,请使用order-map减少输入:
user> (reduce #(if (< (order-map %1) (order-map %2)) %1 %2)
'[Tier20 Tier10 Tier30])
Tier30
Run Code Online (Sandbox Code Playgroud)
user> (sort-by (zipmap order (range)) '[Tier20 Tier10 Tier30])
(Tier10 Tier20 Tier30)
Run Code Online (Sandbox Code Playgroud)
如果你需要经常修改这个地图而不是每次重新排序它然后使用数据sorted-set-by结构来存储你的输入.