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 ...)
Я нашел в этом ответе