gpt4 book ai didi

clojure - 在 Clojure 中过滤集合 clojure.set/select 与 clojure.core/filter

转载 作者:行者123 更新时间:2023-12-03 00:28:57 26 4
gpt4 key购买 nike

我想过滤一组,例如:

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

最佳答案

clojure.set是用于常见集合操作的便捷 API。

在本例中,clojure.set/select是特定于集合的过滤器。它的工作原理是从给定集合中分离出不满足谓词的元素。

(require 'clojure.set)

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

关于clojure - 在 Clojure 中过滤集合 clojure.set/select 与 clojure.core/filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com