用[「a」「b」「r」「d」「r」]如何替換索引2和4中的項目,值爲「標記「,以便得到[」a「」b「」標記「」d「」標記「]。候選替代品的價值是未知的,只是指數是已知的。如何根據索引列表替換多個矢量元素
試圖使用map
與列表(2 4)
導致多個向量。 assoc
對於有多個索引的實例也不起作用。
用[「a」「b」「r」「d」「r」]如何替換索引2和4中的項目,值爲「標記「,以便得到[」a「」b「」標記「」d「」標記「]。候選替代品的價值是未知的,只是指數是已知的。如何根據索引列表替換多個矢量元素
試圖使用map
與列表(2 4)
導致多個向量。 assoc
對於有多個索引的實例也不起作用。
剛副教授新的項目對應的指標:
(assoc ["a" "b" "r" "d" "r"] 2 "mark" 4 "mark")
或使其更加堅固:
(apply assoc ["a" "b" "r" "d" "r"] (interleave [2 4] (repeat "mark")))
或減少:
(reduce #(assoc %1 %2 "mark")
["a" "b" "r" "d" "r"]
[2 4])
'apply assoc'的解決方案既簡潔又可讀。謝謝。 –
函數定義:
(defn replace-indexed [smap coll]
(map-indexed (fn [i e] (get smap i e)) coll))
用法:
user> (replace-indexed {2 "mark" 4 "mark"} ["a" "b" "r" "d" "r"])
;; => ("a" "b" "mark" "d" "mark")
結果是一個序列,而不是一個矢量。
非常感謝。我曾嘗試將更新導入替換失敗。 –
這看起來像功課。你試過什麼了? – schaueho