确定向量是否在clojure中相交

时间:2016-03-16 21:03:56

标签: clojure

我有两个字符串向量。需要确定它们是否相交(具有一个或多个相同的元素)。例如:

["1" "2" "3"] ["11" "3" "44"] => true

["22" "33"] ["44" "55"] => false

最好的办法是什么?

2 个答案:

答案 0 :(得分:1)

您可以将第一个向量添加到集合中,然后使用some检查某个第二个向量的值是否在此集合中:

user> (def v1 ["1" "2" "3"])
#'user/v1
user> (def v2 ["11" "3" "44"])
#'user/v2
user> (def v3 ["11" "12" "13"])
#'user/v3
user> (some (set v1) v2)
"3"
user> (some (set v1) v3)
nil

"3"niltruefalse中将被视为ifwhen。您可以选择使用boolean

明确地将其换行
(boolean (some (set v1) v2))

答案 1 :(得分:1)

Clojure具有用于计算集合交集的内置函数。因此,您只需检查交叉点是否为空:

main> (not (empty? (apply clojure.set/intersection
                          (map set
                               [["1" "2" "3"] 
                                ["11" "3" "44"]]))))
true
main> (not (empty? (apply clojure.set/intersection
                          (map set
                               [["22" "33"] 
                                ["44" "55"]]))))
false