Clojure:将列表中的元素插入特定索引处的矢量

Clojure:将列表中的元素插入特定索引处的矢量

问题描述:

我创建了一个名为pretend的地图列表。Clojure:将列表中的元素插入特定索引处的矢量

(def pretend (map (fn [num] {:alias (str "alias " num), :real (str "real " num)}) (range 6 32))) 

其中给出:

({:alias "alias 6", :real "real 6"} {:alias "alias 7", :real "real 7"} {:alias "alias 8", :real "real 8"} {:alias "alias 9", :real "real 9"} {:alias "alias 10", :real "real 10"} {:alias "alias 11", :real "real 11"} {:alias "alias 12", :real "real 12"} {:alias "alias 13", :real "real 13"} {:alias "alias 14", :real "real 14"} {:alias "alias 15", :real "real 15"} {:alias "alias 16", :real "real 16"} {:alias "alias 17", :real "real 17"} {:alias "alias 18", :real "real 18"} {:alias "alias 19", :real "real 19"} {:alias "alias 20", :real "real 20"} {:alias "alias 21", :real "real 21"} {:alias "alias 22", :real "real 22"} {:alias "alias 23", :real "real 23"} {:alias "alias 24", :real "real 24"} {:alias "alias 25", :real "real 25"} {:alias "alias 26", :real "real 26"} {:alias "alias 27", :real "real 27"} {:alias "alias 28", :real "real 28"} {:alias "alias 29", :real "real 29"} {:alias "alias 30", :real "real 30"} {:alias "alias 31", :real "real 31"}) 

而且我希望到列表中的每个元素插入下面的载体。

(def identities 
    [{:alias "Batman" :real "Bruce Wayne"} 
    {:alias "Spiderman" :real "Peter Parker"} 
    {:alias "Santa" :real "Your mom"} 
    {:alias "Easter Bunny" :real "Your dad"} 
    {:alias "alias 5", :real "real 5"} 
    ;; ... elements from the "pretend" list should be inserted here 
    {:alias "alias 31", :real "real 31"} 
    {:alias "alias 32", :real "real 32"} 
    {:alias "alias 33", :real "real 33"} 
    {:alias "alias 34", :real "real 34"}]) 

但我没有这样做,当我尝试以下。它将索引5中的元素替换为地图列表,这不是我想要的。我想从列表pretend插入地图中的所有元素到地图的矢量在索引5

(def identities (assoc identities 5 pretend)) 

(let [[before after] (split-at 5 identities)] 
    (vec (concat before pretend after))) 

我对你的数据结构两方面的关注。

  • 您正在使用def进行增量更改。做两遍,并且 你会有一堆重复的条目。
  • 你需要一个载体的地图?如果一个别名只有一个真实的身份,那么你可以有一个从别名到真实身份的映射。

它看起来像这样:

(into {} (map (juxt :alias :real) identities)) 

{"Batman" "Bruce Wayne", "alias 5" "real 5", "Santa" "Your mom", 
"alias 31" "real 31", "alias 32" "real 32", "alias 33" "real 33", 
"Easter Bunny" "Your dad", "alias 34" "real 34", "Spiderman" "Peter Parker"} 

您可以从您的identities从而得出它