以下是我解决问题的方法。
如果你查看 (slurp "integers.txt")
的结果,那将只是一个单一的字符串。所以需要将其切分。
为此,我们需要一些字符串函数,所以
(require '[clojure.string :as str])
让我们看看里面有什么我们可以使用的
(dir str)
blank?
capitalize
ends-with?
escape
includes?
index-of
join
last-index-of
lower-case
re-quote-replacement
replace
replace-first
reverse
split
split-lines
starts-with?
trim
trim-newline
triml
trimr
upper-case
nil
split-lines 看起来非常有用。
(doc str/split-lines)
-------------------------
clojure.string/split-lines
([s])
Splits s on \n or \r\n.
所以 (str/split-lines "1\n2\n") 应该返回一个包含 ("1" "2") 的序列,我们离需要的地方很近了。要找出如何处理数组,让我们在 repl 中查询
(apropos "array") 返回很多内容,但我注意到 clojure.core/int-array。
调用 (doc int-array)
clojure.core/int-array
([size-or-seq] [size init-val-or-seq])
Creates an array of ints
首先参数 "size-or-seq" 的意思是可以将集合作为数组的元素传入。字符串分开后我们得到一个字符串集合,如果我们能将这些字符串转换为整数,我想我们就成功了。
将一种东西的集合转换为另一种东西的集合的方法是使用 map。从字符串中解析整数的做法是 Integer/parseInt。
将这一切综合起来
(int-array (map #(Integer/parseInt %) (str/split-lines s)))