具有Python和C#背景的Newish Clojure开发人员。我有类似的东西:
(def coll #{
:key1 ["string1"]
:key2 ["string2"]})
我需要定义一个新的字符串来连接两个关键向量的值。我试过了
(clojure.string/join (get coll :key1 :key2))
(concat (get coll :key1 :key2))
虽然这些拉出第一个键的字符串值,但我无法得到第二个键。
从集合中获取和连接两个值的惯用Clojure方法是什么?我想要的输出是:
"string1string2"
答案 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"