将一系列懒惰的地图转换为单个地图

Sti*_*irk 1 clojure

我是 Clojure 菜鸟。我正在尝试采用一系列懒惰的地图并将其转换为单个地图。映射键是一个整数,值是一个向量。我见过很多合并地图的例子,例如

(merge map1 map2) ;;or
(into {} [{a: 1} {b: 2} {c: 3}])
Run Code Online (Sandbox Code Playgroud)

但是当它是一个懒惰的序列时我仍然有困难。当我使用:

(into {} mapSeq) 
Run Code Online (Sandbox Code Playgroud)

它只返回序列中的最后一张地图。

(defn combine-maps [mapSeq]
  (pp/pprint (into {} mapSeq))))

(defn file-input-to-vec [file] 
  (let [page (line-seq (clojure.java.io/reader file))
        page-number (vec (mapv #(str/split %1 #" ") page))] 

    (combine-maps (for [i page-number]  
                { :pageID (edn/read-string (first i)) 
                  :outpages (convert-to-int-vec (drop 1 i)) }))))
Run Code Online (Sandbox Code Playgroud)

我只得到最后一页:

{:pageID 6, :outpages [9770 0 8758 6103 9560 356 8469 3570 1178]}
Run Code Online (Sandbox Code Playgroud)

我想要这个:

{:pageID 0, :outpages [6 5 2 4 1 3], 
 :pageID 1, :outpages [0 461 4772 1324 1735 487 5668],
 :pageID 2, :outpages [4412 0 209 3130 6902 8397 4373 905 3833],
 :pageID 3, :outpages [5103 1203 7063 0 5866 445 5498 6217 6498], 
 ... }
Run Code Online (Sandbox Code Playgroud)

and*_*hut 5

你说你想要的返回值不是一个合法的映射,因为它有多次出现的 key:pageID和多次出现的 key :outpages。Clojure 映射(以及它们在大多数编程语言中的相应内容,例如 Python 中的字典)每个键最多出现一次。

如果您将想要的内容更新为有效的 Clojure 数据结构的返回值,那么有人可能会帮助编写代码。