Обработка пар значений из двух последовательностей в Clojure - PullRequest
8 голосов
/ 17 июня 2009

Я пытаюсь войти в сообщество Clojure. Я много работал с Python, и одной из функций, которые я широко использую, является метод zip () для итерации по парам значений. Есть ли (хитрый и короткий) способ добиться того же в Clojure?

Ответы [ 3 ]

12 голосов
/ 17 июня 2009

Другой способ - просто использовать map вместе с некоторой функцией, которая собирает свои аргументы в последовательности, например:

user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])
4 голосов
/ 17 июня 2009
(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
3 голосов
/ 19 июня 2009

На вопрос дан ответ, но все еще есть interleave, который также обрабатывает произвольное количество последовательностей, но не группирует полученную последовательность в кортежи (но вы можете использовать partition для этого).

...