I'm trying to get into the Clojure community. I've been working a lot with Python, and one of the features I make extensive use of is the zip() method, for iterating over pairs of values. Is there a (clever and short) way of achieving the same in Clojure?
+4
A:
(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}
Iterating over maps happens pairwise, e.g. like this:
(doseq [[k v] (zipmap [:a :b :c] (range 3))]
(printf "key: %s, value: %s\n" k v))
prints:
key: :c, value: 2
key: :b, value: 1
key: :a, value: 0
achim
2009-06-17 19:30:16
I tested the approach, and it couldn't handle three or more sequences. I should have mentioned that requirement in the initial question, sorry.
Thomas
2009-06-17 19:39:08
+5
A:
Another way is to simply use map together with some function that collects its arguments in a sequence, like this:
user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])
CAdaker
2009-06-17 19:34:06
+2
A:
The question has been answered, but there's still interleave, which also handles an arbitrary number of sequences, but does not group the resulting sequence into tuples (but you can use partition for that).
pmf
2009-06-19 08:16:43