clojure - 如何遍历一个集合并在每次迭代中访问上一个,当前和下一个值?

标签 clojure

如何在Clojure中迭代集合的元素,以便可以在每次迭代中访问上一个,当前和下一个值。

具有以下 vector :

[1 2 3 4]

我希望每次迭代都可以访问以下值:
[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]

最佳答案

一种方法是在集合之前和之后 concat 设置nil,并使用步长为1的3个元素对其进行 partition 设置。

(def c [1 2 3 4])
(def your-fn println) ;; to print some output later
(map your-fn
     (map vec (partition 3 1 (concat [nil] c [nil]))))

(如果元素是LazySeq而不是 vector ,则也可以删除map vec部分,如果可以的话)。

哪些打印:

[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]

关于clojure - 如何遍历一个集合并在每次迭代中访问上一个,当前和下一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924141/

相关文章:

vector - Clojure HashMap 作为广义向量

Clojure - 将文件路径转换为树

clojure - 复合函数的元数据(即使用 comp 时)

clojure - 改进循环递归

testing - 表格测试的测试先决条件;表格如何工作?

clojure - 字段访问器作为 Clojure 中的函数?

clojure - Clojure 中的交互式动态绘图/图表

lisp - 对学习哪种 Lisp 变体有什么建议吗?

clojure - 是否有Clojure的语言规范?

clojure - 为什么 Datomic 在迭代时会连续两次产生相同的临时 ID?