在集列表中删除所有的子集

我有一组元素的列表。 例:

'([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])

任何帮助是极大的赞赏。

提前致谢。

--------------解决方案-------------

(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}))

DEMO

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})

(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])

它应该是那样简单(如果你不关心排序)

(def a '( [1 2] [3 4] [5 6] ))
(def b '( [1 2] [33 34] [5 6] ))
(list* (set (concÂat ab)))

(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]))))

分类:Clojure的 时间:2015-03-15 人气:0
本文关键词: 集,Clojure中,子集
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.110 (s). 10 q(s)