在 Clojure 中将序列转换为集合的惯用方法是什么?例如,我在点处填写什么?
(let s [1 1 2 2 3 3]
...)
所以它产生:
#{1 2 3}
我想出:
(let [s [1 1 2 2 3 3]]
(loop [r #{} s s]
(if (empty? s) r (recur (conj r (first s)) (rest s)))))
但这似乎不是要走的路?是否已经有一个功能可以做到这一点?
在 Clojure 中将序列转换为集合的惯用方法是什么?例如,我在点处填写什么?
(let s [1 1 2 2 3 3]
...)
所以它产生:
#{1 2 3}
我想出:
(let [s [1 1 2 2 3 3]]
(loop [r #{} s s]
(if (empty? s) r (recur (conj r (first s)) (rest s)))))
但这似乎不是要走的路?是否已经有一个功能可以做到这一点?
大多数集合都有一个函数,可以从任何可序列化的形式生成它们:
(set [1 1 2 2 3 3])
#{1 2 3}
对于更有趣的情况,该into
功能很高兴了解:
(into #{1} [2 2 3 3])
#{1 2 3}
来自http://clojure.org/data_structures#Data Structures-Sets:
您还可以使用 set 函数获取集合中的一组值:
(set [1 2 3 2 1 2 3])
#{1 2 3}