我有两个字符串向量。需要确定它们是否相交(具有一个或多个相同的元素)。例如:
["1" "2" "3"] ["11" "3" "44"] => true
["22" "33"] ["44" "55"] => false
最好的办法是什么?
答案 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"
和nil
在true
或false
中将被视为if
和when
。您可以选择使用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