用[“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