2009-06-17 8 views

Répondre

12

Une autre façon est d'utiliser simplement la carte avec une fonction qui recueille ses arguments dans une séquence, comme ceci:

user=> (map vector '(1 2 3) "abc") 
([1 \a] [2 \b] [3 \c]) 
+0

Cet exemple a pu gérer trois séquences, merci. – Thomas

4
(zipmap [:a :b :c] (range 3)) 
-> {:c 2, :b 1, :a 0} 

L'itération sur des cartes se fait par paires, par ex. comme ceci:

(doseq [[k v] (zipmap [:a :b :c] (range 3))] 
    (printf "key: %s, value: %s\n" k v)) 

impressions:

key: :c, value: 2 
key: :b, value: 1 
key: :a, value: 0 
+0

J'ai testé l'approche, et elle ne pouvait pas gérer trois séquences ou plus. J'aurais dû mentionner cette exigence dans la question initiale, désolé. – Thomas

3

La question a été répondu, mais il reste interleave, qui gère également un nombre arbitraire de séquences, mais ne regroupe pas la séquence résultante en tuples (mais vous pouvez utiliser partition pour le à).

Questions connexes