在clojure中循环并存储到数组中

时间:2013-01-03 02:56:43

标签: arrays clojure

我在java中有这段代码

public class read{ 
   private ArrayList <String[]> test = new ArrayList<String[]>(); 

    //arr is a valid array 
//br is a buffered reader
while(br.readline())
    test.add(store(arr[]));

public String[] store (String[] str_arr) {
    String a; 
    new_str_arr[] = new String[2];
    new_str_arr[1] = str_arr[0];
    new_str_arr[0] = "Header";
    return new_str_arr;
}

我怎么能把它转换成clojure?

2 个答案:

答案 0 :(得分:3)

不清楚你想要什么,但是,如果想要读取文本文件并将每一行存储到一个元素数组中,并且如果文件的大小不是很大,你可以试试这个:

(use '[clojure.string :only (split)])
(split (slurp "file_name.txt") #"\r\n"))

答案 1 :(得分:0)

不确定您要完成的任务。您不会将br.readLine()的结果存储到String变量中,因此在您的程序中可能不会发生任何有趣的事情。从你提供的文字来看,也许这就近了:

(use 'clojure.java.io)
(with-open [rdr (reader "/tmp/test.txt")]
  (doall (map vector (line-seq rdr))))

Input file:
123
12
123
12
123
12
123
12
123

Output:
(["123"] ["12"] ["123"] ["12"] ["123"] ["12"] ["123"] ["12"] ["123"])

文件是逐行读取的,并不是一次性存储在内存中。结果却是。需要doall,因为map会返回一个懒惰的seq。当lazy seq的一个元素在with-open之外实现时,该文件就已经被关闭了。

相关问题