2

我有一个称为 re-val 的序列序列的数据。数据是从 .csv 文件中读取的。以下是数据示例:

("      4999" "186300" "    194300" "         0" "380600" "325 " "57" 0)
("      1037" "184200" "    458800" "      6300" "649300" "111 " "124" 0)

有没有比以下更简单、更干净的方法来对每个序列的每个成员应用修剪?

(def val1 (map (fn [x] (map #(cstr/trim %) x)) re-val))

def 用于 repl 诊断目的。实际的 sos 将被提供给文件写入函数。

以下是数据的外观(second val1)

("37" "184200" "458800" "6300" "649300" "111" "124" "0")
4

3 回答 3

2

您的解决方案可以改进一点:

(def val1 (map #(map cstr/trim %) re-val))

为了使其更具可读性,我可能会求助于for

(def val1 (for [line re-val] (map trim line)))

但这并没有减少字符数...

于 2012-11-06T14:56:36.773 回答
1

这有效:

user> (def l '("        28" "186300" "    194300" "         0" "380600" "325 " "57" 0))
#'user/l
user>  (map trim (vec l))
("28" "186300" "194300" "0" "380600" "325" "57" "0")
于 2012-11-06T14:12:04.460 回答
1
=>((partial map (partial map clojure.string/trim)) data)

(("28" "186300" "194300" "0" "380600" "325" "57" "0")
 ("37" "184200" "458800" "6300" "649300" "111" "124" "0"))

如果您有多个嵌套集合,或者深度未知的集合,并且您希望修剪所有字符串,您也可以使用 walks

=>(use 'clojure.walk)
  (postwalk #(if (string? %) (clojure.string/trim %) %) data)

[["28" "186300" "194300" "0" "380600" "325" "57" 0]
 ["37" "184200" "458800" "6300" "649300" "111" "124" 0]]
于 2012-11-06T15:13:49.487 回答