我想从 hashmap 构建一个动态 condp。 我有以下结构: [{ :value 50 :ret "value50"} { :value 100 :ret "value100 }]
我想动态创建以下 condp:
(condp < n
50 "value50"
100 "value100"
"default")
我必须使用宏来创建这个表达式吗?
最佳答案
来自 (doc condp)
=>
...
对于每个子句,评估 (pred test-expr expr)。如果它返回逻辑真,则该子句匹配。
...
这意味着在平均情况下,您将进行 m/2 次比较,其中 m 是 HashMap 中的条目数,因此如果性能在您的场景中很重要,您可能会找到更好的解决方案。
无论如何,这里有一个替代解决方案,我并不是说它更有效,只是对于像我这样的普通编码人员来说更容易阅读
(def n 90)
(def clauses (hash-map 50 "value50", 100 "value100"))
(get clauses (first (filter #(< n %) (sort (keys clauses)))) "default")
编辑以确保按顺序评估子句
关于clojure - 从 hashmap 向量构建 condp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135915/