clojure: как построить строку из двух последовательностей?

Я часами борюсь с проблемой... Я хочу построить ссылку со значениями из двух последовательностей.

(doseq [item photoset-name] (prn item ))
(doseq [item-name photoset-id] (prn item-name ))

выход:

"AlbumTitel2"
"test"
"AlbumTitel"
"album123"
"speciale"
"neues B5 Album"
"Album Nr 2"
"72157632764328569"
"72157632769231530"
"72157632769092584"
"72157632768156156"
"72157632762740183"
"72157632724688181"
"72157632760876608"

Теперь я хочу создать такую ​​ссылку (для каждого идентификатора / имени):

<a href="http://example.com?id=72157632764328569">AlbumTitel2</a>

И это должна быть последовательность или карта... все, что я могу повторить, хотя.

У кого-нибудь есть идеи как это заархивировать?

Спасибо!

2 ответа

(map #(str "<a href=\"http://example.com?id="
           %1
           "\">"
           %2
           "</a>") photoset-ids photoset-names)

Вы можете попробовать использовать карту одним из двух способов (у меня нет Clojure под рукой, поэтому я не могу проверить):

(map #(prn "<a href=\"" %1 "\">" %2 "</a>") item item-name)

или же

(doseq [pair (map vector item item-name)]
  (prn "<a href=\"" (first pair) "\">" (second pair) "</a>"))

РЕДАКТИРОВАТЬ: будьте осторожны, используя map; это лениво, так что если вы не используете результат, возвращаемый им, тогда он может не выполняться!

Это также может работать:

(doseq [[url title] (map vector item item-name)]
  (prn "<a href=\"" url "\">" title "</a>"))

Объединение элементов из нескольких списков в пары в одном списке обычно называют "архивацией". (map vector ...) Я нашел в этом ответе

Другие вопросы по тегам