如何在Clojure中更新矢量中的项目?

Zub*_*air 18 clojure

如果我有一个Vector:

[1 2 3 4 5 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)

:我想用0替换5给出:

[1 2 3 4 0 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)

当我只知道索引是4时,我怎么能这样做?

就像是:

 (replace-in-vec [1 2 3 4 5 6 7 8 9] 4 0)
Run Code Online (Sandbox Code Playgroud)

unp*_*680 39

assoc 也适用于矢量!

 Usage: (assoc map key val)
        (assoc map key val & kvs)
Run Code Online (Sandbox Code Playgroud)

关联].应用于地图时,返回相同(散列/排序)类型的新映射,其中包含键(s)到val(s)的映射.应用于向量时,返回包含val的索引的新向量. 注 - 索引必须是<=(计数向量).

(assoc [1 2 3] 1 :a)
 => [1 :a 3]
Run Code Online (Sandbox Code Playgroud)

  • 另一个注意事项:您还可以使用`assoc`追加向量.`(assoc [:a:b] 2:c)`给`[:a:b:c]`. (8认同)
  • 还有`update-in`:`(update-in v [4] - 5)`.如果您只想将五重置为零,这当然是一个愚蠢的例子.但是,如果零是基于五的计算结果,它可以非常方便,例如.移动坐标等. (3认同)