vector - Clojure:增加列表中每个向量的第一个元素

标签 vector clojure

我有一个这样的向量列表:

([4 0] [4 2] [2 1] [4 1])

如何将每个向量的第一个元素递增一个特定值 X?

期望的输出:

([5 0] [5 2] [3 1] [5 1])

这是我目前的方法,但我认为我可以更简单:

(defn shiftVector [oldVector number]
   (map vector
      (map #(+ (first %) number) oldVector )
      (map  #(second %) oldVector))
)

最佳答案

由于向量在它们的索引上是关联的,所以最简单的方法可能是:

(defn shift-vector [v n]
  (map #(update % 0 + n) v))

(shift-vector [[4 0] [4 2] [2 1] [4 1]] 1)
;=> ([5 0] [5 2] [3 1] [5 1])

这适用于列表中的任何长度向量(空向量除外,但无论如何你都不能增加它们)。

关于vector - Clojure:增加列表中每个向量的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66497082/

相关文章:

c++ - 如何将 Char** 插入 uin8_t vector ?

c++ - 为什么 vector 不循环更新?

r - 编写一个将向量作为输入、丢弃不需要的值、删除重复项并返回原始向量的相应索引的函数

C++ - STL vector 问题

algorithm - clojure 中的链式调用?

scala - 在 Haskell 中编写时间函数

c++ - 如何存储 LPD3DXSPRITE 对象的 vector ?

ruby-on-rails - Rails 类型的 webapp 中的 'Model' 如何用函数式编程语言实现?

clojure - 循环先前定义的函数

clojure - 从不同的命名空间运行嵌入代码