我正在寻找一种惯用的方式来打印以逗号分隔的序列的每个项目,而不打印尾随逗号。我想避免使用clojure.string/join
,因为我不想创建中间字符串(这就是我之前所做的,而且代码更难遵循)。我宁愿只打印元素。
这就是我现在所拥有的:
(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。