2016-04-28 129 views
-1

用[「a」「b」「r」「d」「r」]如何替換索引2和4中的項目,值爲「標記「,以便得到[」a「」b「」標記「」d「」標記「]。候選替代品的價值是未知的,只是指數是已知的。如何根據索引列表替換多個矢量元素

試圖使用map與列表(2 4)導致多個向量。 assoc對於有多個索引的實例也不起作用。

+2

這看起來像功課。你試過什麼了? – schaueho

回答

3

剛副教授新的項目對應的指標:

(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]) 
+0

'apply assoc'的解決方案既簡潔又可讀。謝謝。 –

1

函數定義:

(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") 

結果是一個序列,而不是一個矢量。

+0

非常感謝。我曾嘗試將更新導入替換失敗。 –