2016-04-28 91 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

非常感谢。我曾尝试将更新导入替换失败。 –