末尾のコンマを印刷せずに、シーケンスの各項目をコンマで区切って印刷する慣用的な方法を探しています。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
。コードは最初のオプションに似ていますが、ランダムにアクセスできないシーケンスでは非効率的です。を使用して、が文字列である
interpose
かどうかを確認します。element
(doseq [element (interpose ", " a-map)] (if (str? element) (print element) (printf "%s = %s" (key element) (val element))))
重複しているので、1または2は好きではありません。if条件のため、3は好きではありません。