我想比较两个向量,并找出它们所拥有的项目是否相同,无论项目的顺序如何.
所以..
现在在clojure:
(= [1 2 3] [3 2 1]) ;=> false
Run Code Online (Sandbox Code Playgroud)
我想要:
(other_fun [1 2 3] [3 2 1]) ;=> true
(other_fun [1 2 3 4] [3 2 1]) ;=> false
Run Code Online (Sandbox Code Playgroud)
我找不到java中的containsAll
Gor*_*vic 26
如果您关心重复项,则可以比较它们的频率图.这些是将每个集合元素作为键和出现次数作为值的映射.您可以使用标准函数创建它们frequencies,就像给出的示例一样.
不同的顺序,相同数量的重复:
(= (frequencies [1 1 2 3 4])(frequencies [4 1 1 2 3]))
评估true.
不同的顺序,不同数量的重复:
(= (frequencies [1 1 2 3 4])(frequencies [4 1 2 3]))
评估false.
所以,你可以编写一个函数:
(defn other_fun [& colls]
(apply = (map frequencies colls)))
Run Code Online (Sandbox Code Playgroud)
Chr*_*erg 17
如果你不关心重复,你可以从两个向量创建集合并比较这些:
(= (set [1 2 3]) (set [3 2 1])) ;=> true
Run Code Online (Sandbox Code Playgroud)
作为一个功能:
(defn set= [& vectors] (apply = (map set vectors)))
Run Code Online (Sandbox Code Playgroud)
Vla*_*eev 10
如果你不关心重复,其他答案是完全适用和有效的.但是如果你关心重复,可能最简单的比较两个向量的方法是排序和比较:
user=> (= (sort [3 5 2 2]) (sort [2 2 5 3]))
true
user=> (= (sort [3 5 2 2]) (sort [2 5 3]))
false
Run Code Online (Sandbox Code Playgroud)
从中创建集合:
user=> (= (set [1 2 3]) (set [3 2 1]))
true
user=> (defn other_func [col1 col2]
(= (set col1) (set col2)))
#'user/other_func
user=> (other_func [1 2 3] [3 2 1])
true
Run Code Online (Sandbox Code Playgroud)