检查一个向量是否包含来自另一个向量的至少一个值

时间:2016-04-13 14:43:48

标签: clojure

如果我有两个向量:

(def moo [:a :b :c :d])

(def foo [:a :z :d :e :f :g])

检查moo是否包含至少一个同样在foo中的值的最简单(规范)方法是什么?在这种情况下,它将返回真实的'因为:a和:d出现在foo中。

其次:如果foo包含moo的所有元素(但允许包含其他元素),是否有可能进一步优化以返回true

3 个答案:

答案 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)))