如何在Clojure中合并嵌套在向量集合中的哈希映射?

5

给定一组分离哈希映射的向量,

如何从以下内容中获得:

[[{:a 1} {:b 2} {:c 3}] [{:a 4} {:b 5} {:c 6}] [{:a 7} {:b 8} {:c 9}]]

To:

[[{:a 1 :b 2 :c 3}] [{:a 4 :b 5 :c 6}] [{:a 7 :b 8 :c 9}]]

感谢您的回答!

2
给定的答案返回了所请求的嵌套数据结构 - 一个向量的向量,每个内部向量包含一个单独的映射。很难想象为什么需要这种结构,因为似乎使用由(map (partial apply merge) input-coll)返回的映射序列更简单。下游函数或API的哪个方面需要向量化的映射单元向量? - Alex Stoddard
2个回答

7
(def coll [[{:a 1} {:b 2} {:c 3}] [{:a 4} {:b 5} {:c 6}] [{:a 7} {:b 8} {:c 9}]])

(mapv (fn [v] [(apply merge v)]) coll)
;; => [[{:a 1 :c 3 :b 2}] [{:a 4 :c 6 :b 5}] [{:a 7 :c 9 :b 8}]]

1
mapv(返回向量而不是惰性序列)是 Clojure >= 4 中的函数。只是这么说。 - i-blis

4
(def data [[{:a 1} {:b 2} {:c 3}] [{:a 4} {:b 5} {:c 6}] [{:a 7} {:b 8} {:c 9}]])

(mapv #(-> [(into {} %)]) data)

我以前没有见过 #(-> ...) 这种用法。它是否是在使用像 [] 这样的数据字面量时,绕过简写的 #() 语法行为的一种解决方法? - Alex Stoddard
是的,没错。除了我的代码之外,我从未在任何Clojure代码中看到过这个。 - Ankur
1
“#(vector (into {} %))”相比之下有什么优势? - sw1nn
没有什么特别的,只是在这种情况下我们使用向量文字表示法。 - Ankur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接