我想过滤一组,例如:
(filter-set even? #{1 2 3 4 5})
; => #{2 4}
如果我使用clojure.core/filter
,我会得到一个不是集合的 seq:
(filter even? #{1 2 3 4 5})
; => (2 4)
所以我带来的最好的是:
(set (filter even? #{1 2 3 4 5}))
但我不喜欢它,从集合到列表再到集合看起来不是最佳选择。Clojurian 的方法是什么?
更新
我做了以下比较@A.Webb 和@Beyamor 的方法。有趣的是,两者的性能几乎相同,但clojure.set/select
稍好一些。
(defn set-bench []
(let [big-set (set (take 1000000 (iterate (fn [x] (int (rand 1000000000))) 1)))]
(time (set (filter even? big-set))) ; "Elapsed time: 422.989 msecs"
(time (clojure.set/select even? big-set))) ; "Elapsed time: 345.287 msecs"
nil) ; don't break my REPL !