2011-05-29 42 views
10

如果我有一个向量:如何更新Clojure中的矢量项?

[1 2 3 4 5 6 7 8 9] 

:我想用0来代替5给:

[1 2 3 4 0 6 7 8 9] 

我怎样才能做到这一点时,我只知道该指数为4 ?

喜欢的东西:

(replace-in-vec [1 2 3 4 5 6 7 8 9] 4 0) 

回答

29

assoc作品与载体呢!

Usage: (assoc map key val) 
     (assoc map key val & kvs) 

ASSOC [莱特]。应用于地图时, 会返回一个与 (散列/排序)类型相同的新地图,其中包含密钥到val的映射关系( )。 当 应用于向量时,返回包含索引处的val的新的 向量。 注 - 索引必须是< =(计数 矢量)。

(assoc [1 2 3] 1 :a) 
=> [1 :a 3] 
+2

并且还'更新in':'(更新-v中[4] - 5)'。这当然是一个愚蠢的例子,如果你只是想把五重置为零。但是,如果零是基于五的计算结果,它可以派上用场。移动坐标等。 – kotarak 2011-05-30 06:38:15

+7

另一个注意事项:你也可以用'assoc'附加到一个向量。 '(assoc [:a:b] 2:c)'给出'[:a:b:c]'。 – kotarak 2011-05-30 06:40:08