簡體   English   中英

在Clojure clojure.set / select vs. clojure.core / filter中過濾一組

[英]Filter a set in Clojure clojure.set/select vs. clojure.core/filter

我想過濾一組,例如:

(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的方式是什么?

UPDATE

我做了以下比較@ 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 !

clojure.set是一個用於常見集合操作的便捷API。

在這種情況下, clojure.set / select是一個特定於集的過濾器。 它的工作原理是分離不符合給定集合謂詞的元素。

(require 'clojure.set)

(clojure.set/select even? #{1 2 3 4 5})
; => #{2 4} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM