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

时间:2012-09-27 18:56:25

标签: vector clojure

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

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

2 个答案:

答案 0 :(得分:70)

assoc可以正常使用。它将索引放在哪里放置新值并返回新创建的向量:

Clojure> (assoc [1 2 3] 1 5)
[1 5 3]

答案 1 :(得分:-6)

Yve的回答并没有说明如何更新原始载体。

这样做,但作为一个Clojure菜鸟,我不确定它是最好的方式:

main=> (def ar [1 2 3])
#'main/ar
main=> ar
[1 2 3]
main=> (def ar (assoc ar 1 5))
#'main/ar
main=> ar
[1 5 3]