Domanda

Sto cercando di entrare nella comunità Clojure. Ho lavorato molto con Python e una delle funzionalità di cui faccio largo uso è il metodo zip (), per iterare su coppie di valori. Esiste un modo (intelligente e breve) per ottenere lo stesso in Clojure?

È stato utile?

Soluzione

Un altro modo è semplicemente usare map insieme ad alcune funzioni che raccolgono i suoi argomenti in una sequenza, come questa:

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

Altri suggerimenti

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

L'iterazione su mappe avviene in coppia, ad es. in questo modo:

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

stampe:

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

Alla domanda è stata data una risposta, ma esiste ancora interleave , che gestisce anche un numero arbitrario di sequenze, ma non raggruppa la sequenza risultante in tuple (ma è possibile utilizzare partition per quello).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top