我是Clojure的新手.我的问题是如何获得两个哈希映射的交集,例如
(def map-1 {"a" 2, "b" 1, "c" 4, "d" 3})
(def map-2 {"a" 3, "b" 6, "e" 5})
Run Code Online (Sandbox Code Playgroud)
当我们定义两个映射时,预期的结果将是{"a" 3, "b" 6},它是在具有相交键和具有键的最大值的映射中.
不知怎的,我想出了一个解决方案并实现了它,但它的工作部分正确.
基本思想是找到其中项目数量最少的地图,将其用作参考.对于参考地图中的每个项目,检查其他地图是否包含它.如果它包含,则将键放入输出映射及其最大值(使用(max num1 num2))
以下是我的示例代码:
(defn max-intersect [map1 map2]
(let [smaller-map (if (< (count map1) (count map2))
map1
map2)
longer-map (if (= smaller-map map1)
map2
map1)]
(loop [output {}
reference-map smaller-map]
(if (empty? reference-map)
output
(recur (let [[item-key item-val] (first smaller-map)]
(when (contains? longer-map item-key)
(assoc output item-key (max item-val (get longer-map item-key))))) …Run Code Online (Sandbox Code Playgroud) clojure ×1