我有一个set元素列表。例如:
'([0 1 2][1 2 3] [4 5 6] [5 6 7] [0 1 2 3] [4 5 6 7])
我想删除子集 - [0 1 2] [1 2 3] [4 5 6] [5 6 7]
- 最终答案应为'([0 1 2 3] [4 5 6 7])
。
非常感谢任何帮助。
提前致谢。
答案 0 :(得分:6)
(defn to-superset [ coll ]
(loop [result () coll coll]
(if (empty? coll) result
(let [x (first coll)
xs (rest coll)]
(if (some #(clojure.set/subset? x %) xs)
(recur result xs)
(recur (cons x result) xs))))))
(to-superset '(#{0 1 2} #{1 2 3} #{4 5 6} #{5 6 7} #{0 1 2 3} #{4 5 6 7}))
<强>样本强>
user=> (to-superset '(#{0 1 2} #{1 2 3} #{4 5 6} #{5 6 7} #{0 1 2 3} #{4 5 6 7}))
(#{4 5 6 7} #{0 1 2 3})
答案 1 :(得分:2)
(def set1 '([0 1 2][1 2 3] [4 5 6] [5 6 7] [0 1 2 3] [4 5 6 7]))
(def set2 '([0 1 2] [1 2 3] [4 5 6] [5 6 7]))
(remove (set set2) set1)
结果:
([0 1 2 3] [4 5 6 7])
答案 2 :(得分:1)
应该如此简单(如果你不关心订购)
(def a '( [1 2] [3 4] [5 6] ))
(def b '( [1 2] [33 34] [5 6] ))
(list* (set (concat a b)))
答案 3 :(得分:-1)
(apply list
(difference
(into #{}
'([0 1 2] [1 2 3] [4 5 6] [5 6 7] [0 1 2 3] [4 5 6 7]))
(into #{}
'([0 1 2] [1 2 3] [4 5 6] [5 6 7]))))