首页 > 解决方案 > 如何在每个字符串前面加上分隔符的字符串向量?

问题描述

我正在寻找类似的东西,join但分隔符位于每个字符串的前面,而不仅仅是充当分隔符。

作为一个简单的例子,我正在寻找一个不那么丑陋的版本:

(def params [1 2 3 4])
(clojure.string/join (for [x params] (str "&param=" x)))

结果

"&param=1&param=2&param=3&param=4"

标签: clojure

解决方案


没有分隔符的调用(clojure.string/join coll)(apply str coll)这是一个微小的胜利相同:

(apply str (for [x params] (str "&param=" x)))

那么你可能更喜欢map这里for

(apply str (map #(str "&param=" %) params))

interleave可以工作:

(apply str (interleave (repeat "&param=") params))

您可以重构它以将前缀和interleave它与字符串分开:

(apply str
       (interleave (repeat \&)
                   (map #(str "param=" %) params)))

您可能喜欢线程的外观:

(->> (map #(str "param=" %) params)
     (interleave (repeat \&))
     (apply str))

您可以提取一个函数来更一般地执行此操作:

(defn prepend-join [separator & cs]
  (apply str (apply interleave (repeat separator) cs)))

(prefix-join \& (map #(str "param=" %) params))

推荐阅读