请在 Clojure 2024 年度调查 中分享您的想法!

欢迎!请查看关于页面以了解更多关于本站的信息。

0
编译器

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

(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)))
非常感谢,这个头疼的问题现在解决啦
...