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

欢迎!有关此工作的更多信息,请参阅关于页面。

0
编译器

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

(def s (slurp "integers.txt")) (println s) (def aray (to-array s)) ;;上面的代码没有工作,如何解析文件中的整数并添加到整数数组?谢谢

1 答案

+1

selected by
 
最佳答案

这里是解决这个问题的方法。

如果您查看 (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" 表示我们可以将集合作为数组的iri_content传递。在字符串分割之后,我们得到了一个字符串集合,如果我们能将这些字符串转换成整数,那么我认为我们就成功了。

将一个集合中的一个东西转换成另一个集合中的东西的一种方法是用 map。从字符串解析整数的方法是 Integer/parseInt。

所以,把它们都放在一起

(int-array (map #(Integer/parseInt %) (str/split-lines s)))
by
非常感谢,这真是个头疼的问题,但现在它的工作了
...