连接clojure中的字符串向量列表

时间:2016-05-04 10:27:55

标签: vector clojure

如果我有:

(["aa=AA"] ["&"] ["bb=BB"] ["&"] ["cc=CC"])

我怎样才能得到:

"aa=AA&bb=BB&cc=CC"

是否有可用的连接函数?

3 个答案:

答案 0 :(得分:3)

concat会在一个级别“展平”嵌套序列:

(apply concat '(["aa=AA"] ["&"] ["bb=BB"] ["&"] ["cc=CC"]))
;; => ("aa=AA" "&" "bb=BB" "&" "cc=CC")

然后您可以使用str连接序列中的字符串:

(apply str '("aa=AA" "&" "bb=BB" "&" "cc=CC"))
;; => "aa=AA&bb=BB&cc=CC"

组合成一个功能:

(defn concat-str [s]
  (->> s
    (apply concat)
    (apply str)))

(concat-str '(["aa=AA"] ["&"] ["bb=BB"] ["&"] ["cc=CC"]))
;; => "aa=AA&bb=BB&cc=CC"

答案 1 :(得分:1)

您可以按如下方式实施:

(def concatenate (comp (partial apply str) flatten))

然后:

user> (concatenate '(["aa=AA"] ["&"] ["bb=BB"] ["&"] ["cc=CC"]))
aa=AA&bb=BB&cc=CC

答案 2 :(得分:1)

只是为了好玩: 您也可以使用map函数的行为

user> (defn conc [items] (first (apply map str items)))
#'user/conc

user> (conc '(["aa=AA"] ["&"] ["bb=BB"] ["&"] ["cc=CC"]))
"aa=AA&bb=BB&cc=CC"