我想读取一个文件,对于每一行,我想在文件中附加一个行号。所以结果应该像
[1 "line1"]
[2 "line2"]
[3 "line3"]
如何有效地做到这一点?
答案 0 :(得分:3)
这是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
,因为懒惰和文件句柄之类的有限资源不会混合。
答案 1 :(得分:1)
可能它不符合您的需要,但通用函数map-indexed
值得了解:
(map-indexed
(fn [index line] [(inc index) line])
(line-seq f))