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 に答える