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