在Clojure中加入set literal中的字符串元素

时间:2015-05-21 15:19:26

标签: string clojure

具有Python和C#背景的Newish Clojure开发人员。我有类似的东西:

(def coll #{
  :key1 ["string1"]
  :key2 ["string2"]})

我需要定义一个新的字符串来连接两个关键向量的值。我试过了

(clojure.string/join (get coll :key1 :key2))
(concat (get coll :key1 :key2))

虽然这些拉出第一个键的字符串值,但我无法得到第二个键。

从集合中获取和连接两个值的惯用Clojure方法是什么?我想要的输出是:

"string1string2"

2 个答案:

答案 0 :(得分:1)

你有一张地图,我猜你不希望[ ... ]围绕这些值,所以你的收藏应该是:

(def coll {
  :key1 "string1"
  :key2 "string2"})

在这种情况下,你的第一次尝试并不遥远:

(clojure.string/join (vals coll))
;"string1string2"

如果需要向量,因为每个值都会有更多数据

(def coll {
  :key1 ["string1" :more]
  :key2 ["string2" :stuff]})

...然后你必须挑选出你想要的元素:

(->> coll
     vals
     (map first)
     clojure.string/join)
;"string1string2"

答案 1 :(得分:0)

如果你有一张地图,而不是一套(如评论中所建议的那样)那么

(def coll {
  :key1 ["string1"]
  :key2 ["string2"]}) ; {:key1 ["string1"], :key2 ["string2"]}


(->> coll
     vals ; (["string1"] ["string2"])
     (apply concat) ; ("string1" "string2")
     (apply str)) ; "string1string2"