如何在clojure中为文件中的每一行分配一个增量值

how to assign an incremental value to evey line in a file in clojure

我想读取一个文件,我想为文件中的每一行附加一个行号。所以结果应该是

[1 "line1"]
[2 "line2"]
[3 "line3"]

如何有效地做到这一点?

这是 line-seq 的一个很好的用例。

(require '[clojure.java.io :as io])
(with-open [f (io/reader (io/file "test-file"))]
  (mapv vector (next (range)) (line-seq f)))

[[1 "line1"] [2 "line2"] [3 "line3"]]

我在这里使用 mapv,因为懒惰和文件句柄等有限资源不能混用。

也许它不符合您的需要,但通用函数 map-indexed 值得了解:

(map-indexed 
   (fn [index line] [(inc index) line]) 
   (line-seq f))