2009-06-17 15 views
8

Sto provando ad entrare nella comunità Clojure. Ho lavorato molto con Python e una delle funzionalità che utilizzo ampiamente è il metodo zip(), per l'iterazione su coppie di valori. Esiste un modo (intelligente e breve) per ottenere lo stesso risultato in Clojure?Elaborazione di coppie di valori da due sequenze in Clojure

risposta

12

Un altro modo è quello di usare semplicemente mappa insieme con una certa funzione che raccoglie i suoi argomenti in una sequenza, come questo:

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

Questo esempio è stato in grado di gestire tre sequenze, grazie. – Thomas

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

L'iterazione su mappe avviene a coppie, 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 
+0

Ho verificato l'approccio e non è stato in grado di gestire tre o più sequenze. Avrei dovuto menzionare questo requisito nella domanda iniziale, mi dispiace. – Thomas

3

La domanda è stato risposto, ma c'è ancora interleave, che gestisce anche un numero arbitrario di sequenze, ma non raggruppa la sequenza risultante in tuple (ma è possibile utilizzare partition per a).

Problemi correlati