Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Processing pairs of values from two sequences in Clojure

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?

like image 252
Thomas Avatar asked Jun 17 '09 19:06

Thomas


3 Answers

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])
like image 138
CAdaker Avatar answered Oct 20 '22 01:10

CAdaker


(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
like image 38
achim Avatar answered Oct 20 '22 00:10

achim


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).

like image 21
pmf Avatar answered Oct 20 '22 02:10

pmf