1

Java では、java.util.SortedMap<Long,Object>を使用して、次のようなことができます。

sortedMap.headSet(13).clear()

キーが 13 未満のすべての要素を削除します。clojure の 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

Dissocは最善の方法ですが、必要に応じて、ステップをまたはにtake-while置き換える必要があります。subseqrsubseq

于 2013-02-07T05:05:46.433 に答える
1

java.util.SortedMap を使用することは多くの状況で完全に合理的ですが、組み込みのソートマップに対して一般的により効率的なソリューションがあるとは思いません。特に、切り刻んだ後に永続的なマップにする場合はそうです。

それだけの価値があるため、これは次のように書くこともできます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 に答える