我正在尋找一種慣用的方法來打印以逗號分隔的序列中的每個項目,而不打印結尾的逗號。我想避免使用clojure.string/join
,因爲我不想創建一箇中間字符串(這就是我之前做的事情,代碼更難以遵循)。我寧願只打印元素。在seq中的每個項目之間打印逗號
這就是我現在所擁有的:
(doseq [element a-map]
(printf "%s = %s" (key element) (val element))
(print ", "))
我能想到的幾種方法可以做到這一點:
打印的第一項
doseq
外面,然後用打印每個項目前面的逗號。(printf "%s = %s" (key (first a-map)) (val (first a-map))) (doseq [element (rest a-map)] (print ", ") (printf "%s = %s" (key element) (val element)))
打印除了最後跟一個逗號的所有項目,然後再打印
doseq
之外的最後一個項目。代碼與第一個選項類似,但對於不是隨機訪問的seq,效率不高。使用
interpose
並檢查element
是否爲字符串。(doseq [element (interpose ", " a-map)] (if (str? element) (print element) (printf "%s = %s" (key element) (val element))))
我不喜歡1或2,因爲重複的。由於if條件,我不喜歡3。
爲什麼你需要檢查元素是#3中的一個字符串 - 你還期望它是什麼?順便說一句,爲什麼你需要在#3中打印(打印元素)? – 9000 2013-03-13 20:51:13
哦,看起來我有一些拼寫錯誤,我使用'a-map'而不是'element'。但爲了回答你的問題,我期望'element'可以是來自'a-map'的字符串或地圖元素。 – Brigham 2013-03-13 20:53:44