假設我有這樣的如何將字符串集合成一個字符串,並將其添加到前面的位置?
(def base ["one" "two" "three"])
我想將其轉換爲:
1. one
2. two
3. three
(又名1. one \n2. two \n3. three
)
與join
,我不知道在加入之前,我可以追加一個計數器:
(clojure.string/join " \n" base)
=> "one \ntwo \nthree"
與doseq
或相似,加上一個原子,我得到各個琴絃,但屆時將有來連接以後,像
(def base ["one" "two" "three"])
(def pos (atom 0))
(defn add-pos
[base]
(for [b base]
(do
(swap! pos inc)
(str @pos ". " b))))
(let [pos-base (add-pos base)]
(clojure.string/join " \n" pos-base))
=> "1. one \n2. two \n3. three"
雖然它的工作原理,如果使用原子與for
我不知道聲明是他做這件事的最好方式,它看起來並不是很酷的。
請問有更好的方法嗎?
太棒了!看起來clojure具有很多功能,而我最大的問題是發現/發現這些功能! – LocustHorde
除了SO之外,您可以註冊4clojure,然後查看其他人在您做的時候所做的解決方案 - 可用於核心Clojure的API發現以及查看何時/何地可以使用某些功能 – lispHK01
使用keep -indexed'對傳遞給它的lambda返回的每個值進行邏輯真值檢查,最終將其忽略。這種檢查在這種情況下完全沒有用處,因此不必要的開銷。 'map-indexed'就足夠了。 –