用[“a”“b”“r”“d”“r”]如何用索引2和4替换值为“mark”的值,以便[“a”“b”“标记“”d“”mark“]就是结果。候选替换的值是未知的,只是指数是已知的。
尝试将map
与列表(2 4)
一起使用会产生多个向量。 assoc
也不适用于存在多个索引的实例。
答案 0 :(得分:3)
将新项目与相应的索引相关联:
(assoc ["a" "b" "r" "d" "r"] 2 "mark" 4 "mark")
或使其更健壮:
(apply assoc ["a" "b" "r" "d" "r"] (interleave [2 4] (repeat "mark")))
或使用reduce:
(reduce #(assoc %1 %2 "mark")
["a" "b" "r" "d" "r"]
[2 4])
答案 1 :(得分: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")
结果是序列,而不是矢量。