如果我有两个向量:
(def moo [:a :b :c :d])
(def foo [:a :z :d :e :f :g])
检查moo是否包含至少一个同样在foo中的值的最简单(规范)方法是什么?在这种情况下,它将返回真实的'因为:a和:d出现在foo中。
其次:如果foo包含moo的所有元素(但允许包含其他元素),是否有可能进一步优化以返回true
答案 0 :(得分:7)
我会这样做:
第一个问题:
(some (set moo) foo)
如果找到foo
moo
的第一项
第二个:
(every? (set foo) moo)
检查moo
foo
的每个项目
答案 1 :(得分:2)
这将返回一个布尔值,告诉您是否有共享元素:
(empty? (clojure.set/intersection (set moo) (set foo)))
这将告诉您交集是否包含moo中的所有项目:
(= (count moo) (count (clojure.set/intersection (set moo) (set foo))))
答案 2 :(得分:1)
moo在foo中包含一个元素:
(seq (clojure.set/intersection (set moo) (set foo)))
foo包含moo的所有元素:
(empty? (clojure.set/difference (set moo) (set foo)))