Reputation: 2412
What is an idiomatic way to convert a sequence to a set in Clojure? E.g what do I fill in at the dots?
(let s [1 1 2 2 3 3]
...)
So that it produces:
#{1 2 3}
I come up with:
(let [s [1 1 2 2 3 3]]
(loop [r #{} s s]
(if (empty? s) r (recur (conj r (first s)) (rest s)))))
But that seems not the way to go? Is there a function already that does this?
Upvotes: 4
Views: 195
Reputation: 26080
From http://clojure.org/data_structures#Data Structures-Sets:
You can also get a set of the values in a collection using the set function:
(set [1 2 3 2 1 2 3])
#{1 2 3}
Upvotes: 1
Reputation: 91617
most collections have a function that produces them form anything seqable:
(set [1 1 2 2 3 3])
#{1 2 3}
for more interesting cases the into
function is good to know about:
(into #{1} [2 2 3 3])
#{1 2 3}
Upvotes: 14