在clojure中替换向量中的第n个元素的简单方法?

wro*_*ame 43 vector clojure

例如,我有一个向量[1, 2, 3],我想更新第二个元素,以便向量变为[1, 5, 3].在其他语言中,我会做类似的事情array[1] = 5,但我不知道任何可以让我在Clojure中轻松完成的事情.

关于如何实现这一点的想法,或者我是否应该使用不同的数据结构?

yve*_*mes 75

assoc工作得很好.它将索引放在哪里放置新值并返回新创建的向量:

Clojure> (assoc [1 2 3] 1 5)
[1 5 3]
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要新值作为旧值的函数,请使用`update-in`.例如,要增加索引1处的元素,您需要编写`(update-in [1 2 3] [1] inc)`. (17认同)
  • 数组是_associative_结构,它恰好与线性排序的索引相关联,而不是任意的,通常是无序的密钥. (6认同)