我想将矢量中的元素连接到父矢量中的一些矢量中。
example:
;; I have a vector [["1" "2" "3"] ["4" "5"]]
;; and another vector ["6" "7"]
我这样做了:
(map (fn [row]
(conj row ["6" "7"]))
[["1" "2" "3"] ["4" "5"]])
;;=> (["1" "2" "3" ["6" "7"]] ["4" "5" ["6" "7"]])
但我希望我的结果采用以下格式:
;;=> (["1" "2" "3" "6" "7"] ["4" "5" "6" "7"])
请指出我正确的方向。
答案 0 :(得分:1)
您不想要conj
(将向量附加为元素)。您想要concat
或into
代替:
(map (fn [row] (concat row ["6" "7"])) [["1" "2" "3"] ["4" "5"]])
=> (("1" "2" "3" "6" "7") ("4" "5" "6" "7"))
或者更加成功:
(map #(into % ["6" "7"]) [["1" "2" "3"] ["4" "5"]])
=> (["1" "2" "3" "6" "7"] ["4" "5" "6" "7"])
(into
保留了向量,因此它可能是您想要的向量。请参阅文档以了解两者之间的差异。
答案 1 :(得分:1)
您的原始代码非常接近。 conj
添加您传递的每个元素。所以你基本上只缺少apply
:
user=> (map (fn [row] (apply conj row ["6" "7"])) [["1" "2" "3"] ["4" "5"]])
(["1" "2" "3" "6" "7"] ["4" "5" "6" "7"])
答案 2 :(得分:0)
我认为以下是一个更简单的解决方案。它用
来自the Tupelo Core library的glue
函数以及for
语句:
(ns xyz
(:require [tupelo.core :as tc]....
(def data [ [1 2 3] [4 5] ] )
(tc/spyx
(for [curr-vec data]
(tc/glue curr-vec [6 7] )))
;=> (for [curr-vec data] (tc/glue curr-vec [6 7])) => ([1 2 3 6 7] [4 5 6 7])