J'essaie d'entrer dans la communauté Clojure. J'ai beaucoup travaillé avec Python, et l'une des fonctionnalités que j'utilise énormément est la méthode zip(), pour l'itération de paires de valeurs. Y a-t-il une manière (intelligente et courte) de réaliser la même chose dans Clojure?Traitement de paires de valeurs à partir de deux séquences dans Clojure
8
A
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])
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 à).
Cet exemple a pu gérer trois séquences, merci. – Thomas