1

在 Java 中,使用 a java.util.SortedMap<Long,Object>,我们可以执行以下操作:

sortedMap.headSet(13).clear()

摆脱所有键 < 13 的元素。我在 clojure.core 中没有看到任何类似的东西(sorted-map)(我认为它总是 a clojure.lang.PersistentTreeMap)。我想出的最好的是这样的:

(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))

我错过了一些更简单的东西吗?

4

2 回答 2

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}

虽然这主要是一个品味问题。你的例子也很好。

于 2013-02-06T23:29:44.820 回答
1

Dissoc 是您可以做的最好的事情,但take-while应根据需要将该步骤替换为subseqrsubseq

于 2013-02-07T05:05:46.433 回答