小编Kam*_*kid的帖子

使用clojure的两个哈希映射的交集

我是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
推荐指数
1
解决办法
255
查看次数

标签 统计

clojure ×1