我的数据是一系列称为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诊断目的。实际的s-o-s将被送入文件写入功能。
以下是(second val1)
数据的外观。
("37" "184200" "458800" "6300" "649300" "111" "124" "0")
答案 0 :(得分:2)
您的解决方案可能会有所改进:
(def val1 (map #(map cstr/trim %) re-val))
为了使其更具可读性,我可能会使用for
:
(def val1 (for [line re-val] (map trim line)))
但这不会减少字符数......
答案 1 :(得分: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")
答案 2 :(得分: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"))
如果您有多个嵌套集合,或深度未知的集合,并且您希望修剪所有字符串,则还可以使用散步
=>(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]]