2016-04-28 15 views
-1

["a" "b" "" d "" r "]を使用すると、インデックス2と4のアイテムを、 "" "a" "b" "" "d" "mark"]が結果となるようにマークを付けてください。候補置換の値は分かっていません。指標は分かっています。インデックスのリストに基づいてベクトルの複数の要素を置き換える方法

mapをリスト(2 4)と組み合わせて使用​​しようとすると、複数のベクターになります。 assocは、複数のインデックスがあるインスタンスでも機能しません。

+2

これは宿題のように見えます。これまでに何を試しましたか? – schaueho

答えて

3

だけで対応するインデックスに新しい項目を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]) 
+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

非常に感謝しています。私はupdate-inを置き換えにマップしようとしました。 –

関連する問題