2024 Clojure状态调查!中分享您的想法。

欢迎!请访问关于页面了解这个网站的更多信息。

0
编译器

我有一个名为"integer.txt"的文本文件,该文件包含由空格分隔的整数。
我正在尝试使用以下语法从文件中读取整数到整数数组,但没有成功 landing...我需要一个整数数组来进行合并排序,请尽可能帮助我。

(def s (slurp "integers.txt")) (println s) (def aray(to-array s)) ;;上面的代码不起作用;;我该如何在文件中解析整数并将其添加到整数数组中?

1 答案

+1

被选中
 
最佳答案

这是我的解决方案。

如果你看看(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)))
非常感谢,这曾是一个头疼的问题,但现在它正常工作了
...