将哈希映射列表转换为集合

时间:2015-04-23 09:21:57

标签: clojure

有两张地图:

(def a {:a 1 :b 2 :c 3})
(def b {:b 222 :d 4})

放入一个载体:

(def l [a b])

构造集合的最简单方法(就唯一键的结构而言),其中在键冲突的情况下优先级(在这种情况下为b)具有左操作数(:b 2 in这个案例)。换句话说,我想得到一个结果:

{:a 1 :b 2 :c 3 :d 4}

我想到的两个解决方案是:

(apply merge-with (fn [left _] left) l)
(reduce conj (reverse l))

第一个对我来说似乎并不恰当,第二个让我担心,因为急切的列表反转听起来有点不合适。还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

可以考虑(reduce #(into %2 %1) l)(或merge代替into)的许多其他可能性。你的merge-with解决方案绝对没问题。

答案 1 :(得分:0)

怎么样

(apply merge (reverse l))

它似乎很好,而且与第二个相似。