как перебрать список карт в clojure и объединить его в строку

У меня есть список карт с двумя ключами: путь и: размер

 listOfMaps ({:path "a " :size "1 "}{{:path "b " :size " 2"}...)

как перебрать его и объединить его путь и размер со строкой, чтобы он находился между ними

то есть

 str "initial" "a" "1" "b" "2" .... "end" 

т.е. путь и размер, заполняемые через цикл, должны быть между строками "начальный" и "конечный"


person user3083633    schedule 08.07.2016    source источник


Ответы (1)


Может быть, это тяжело, но мне это показалось забавным

(defn str-values [data]
  (as-> data d
        (map vec d)
        (flatten d)
        (remove keyword? d)
        (concat ["initial"] d ["end"])
        (apply str d)))

Выходы

"initiala1b2end"

Это то, что вы хотите ?

EDIT Исправление OlegTheCat

(defn str-values [data]
  (as-> data d
        (map (juxt :path :size) d)
        (flatten d)
        (remove keyword? d)
        (concat ["initial"] d ["end"])
        (apply str d)))
person Joseph Yourine    schedule 08.07.2016
comment
(map vec d) - это неверно. вы не можете полагаться на порядок ключей карты. - person OlegTheCat; 08.07.2016
comment
Вместо этого я бы предпочел использовать (map (juxt :path :size) d). - person OlegTheCat; 08.07.2016