在Java中,使用java.util.SortedMap<Long,Object>
,我们可以执行以下操作:
sortedMap.headSet(13).clear()
用键&lt;去除所有元素13.对于clojure的(sorted-map)
(我认为总是clojure.lang.PersistentTreeMap
),我在clojure.core中看不到任何类似内容。我提出的最好的是这样的:
(let [clear-up-to 13
sm (sorted-map 1 "aye" 2 "bee" 13 "em" 14 "en")]
clear-keys (take-while #(< % clear-up-to) (keys sm))
(apply dissoc sm clear-keys))
我错过了一些更简单的东西吗?
答案 0 :(得分:1)
虽然使用java.util.SortedMap在许多情况下是完全合理的,但我认为对于内置的sorted-map一般没有更高效的解决方案。特别是如果你在砍掉它之后把它变成一张持久的地图。
对于它的价值,也可以使用reduce
:
user> my-sorted-map
{2 1, 4 3, 6 5, 8 7}
user> (reduce dissoc my-sorted-map (take-while #(< % 5) (keys my-sorted-map)))
{6 5, 8 7}
虽然这主要是品味问题。你的榜样也很好。
答案 1 :(得分:1)
Dissoc是您可以做的最好的,但take-while
步骤应根据需要替换为subseq
或rsubseq
。