Обработка пар значений из двух последовательностей в Clojure
Вопрос
Я пытаюсь попасть в сообщество Clojure.Я много работал с Python, и одна из функций, которые я широко использую, — это метод zip() для перебора пар значений.Есть ли (умный и короткий) способ добиться того же в Clojure?
Решение
Другой способ - просто использовать map вместе с некоторой функцией, которая собирает свои аргументы в последовательности, например так:
user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])
Другие советы
(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}
Итерация по картам происходит попарно, например.так:
(doseq [[k v] (zipmap [:a :b :c] (range 3))]
(printf "key: %s, value: %s\n" k v))
принты:
key: :c, value: 2
key: :b, value: 1
key: :a, value: 0
На вопрос был получен ответ, но все еще есть interleave
, который также обрабатывает произвольное количество последовательностей, но не группирует полученную последовательность в кортежи (но вы можете использовать partition код> для этого).
Не связан с StackOverflow