difference

added
1.0

ns
clojure.set

type
function

(difference s1) (difference s1 s2) (difference s1 s2 & sets)

Return a set that is the first set without elements of the remaining sets

                user=> (difference #{1 2 3})
#{1 2 3}
user=> (difference #{1 2} #{2 3})
#{1}
user=> (difference #{1 2 3} #{1} #{1 4} #{3})
#{2}
            
                user=> (difference (set (keys {:1 1 :2 2 :3 3})) (set (keys {:1 1 :2 2})))
#{:3}
user=> (difference (set (keys {:1 1 :2 2})) (set (keys {:1 1 :2 2 :3 3})))
#{}
            
                user=> (difference #{:a :b :c :d} (difference #{:a :b :c :d} #{:c :e :a :f :d}))
#{:a :c :d}
            
                ;; Though it might seem like you can use a vector as the second argument to
;; clojure.set/difference, this should be avoided in almost all situations in favor
;; of casting the vector to a set before calling clojure.set/difference. Otherwise
;; the behavior can appear correct in some situations but be very different from
;; what's expected in other situations:

(difference #{1 2 3} [1 2 3])
#{}
(difference #{1 2 3} [1 2])
#{3}
(difference #{1 2 3} [1 2 3 4])
#{}

(difference #{"1" "2" "3"} ["1" "2" "3"])
#{}
(difference #{"1" "2" "3"} ["1" "2"])
#{"3"}
(difference #{"1" "2" "3"} ["1" "2" "3" "4"])
#{"3" "1" "2"}

(difference #{0 1 2 3} [1 2 3 4 5])
#{}
(difference #{-1 0 1 2 3} [1 2 3 4 5 6])
#{-1}