2014-06-23 15 views
5

Ho due matrici come [1, 2, 3] e ["a", "b", "c"] e voglio mappare i valori zippati (1, "a"), (2, "b") e (3, "c") utilizzando Zip2.Come si esegue il mapping dei valori di Zip2?

Se faccio questo:

let foo = map(Zip2([1, 2, 3], ["a", "b", "c"]).generate()) { $0.0 } 

foo ha il tipo ZipGenerator2<IndexingGenerator<Array<Int>>, IndexingGenerator<Array<String>>>?.

C'è un modo per far sì che un array?

+0

Sono un po 'confuso riguardo la domanda. Vedo che ha già ricevuto una risposta, ma se sei solo dopo un risultato Array, perché non farlo semplicemente: 'lascia foo = map (Zip2 ([1, 2, 3], [" a "," b "," c "])) {$ 0.0}' Quindi 'foo' è una matrice. –

+0

Sembra ragionevole. O è qualcosa che non ho provato, o la libreria Swift è migliorata da quando ho posto questa domanda. – alltom

risposta

6

Di seguito ti porterà una matrice dal valore di ritorno di zip2:

var myZip = Zip2([1, 2, 3], ["a", "b", "c"]).generate() 
var myZipArray: Array<(Int, String)> = [] 

while let elem = myZip.next() { 
    myZipArray += elem 
} 

println(myZipArray) // [(1, a), (2, b), (3, c)] 

- UPDATE: ancora meglio! -

let myZip = Zip2([1, 2, 3], ["a", "b", "c"]) 
let myZipArray = Array(myZip) 

println(myZipArray) // [(1, a), (2, b), (3, c)] 

- ora per il divertimento -

ho intenzione di indovinare che siamo in grado init un nuovo array con tutto ciò che risponde a generate()?

println(Array("abcde")) // [a, b, c, d, e] 
0

Si supponga che vals sia il risultato di Zip2, che presumo sia un array di due tuple. Come questo:

let vals = [(1, "a"), (2, "b"), (3, "c")] 

Con questo, basta richiamare il metodo map() su un array.

vals.map { $0.0 } 

Ad esempio:

> vals.map { $0.1 } 
$R16: String[] = size=3 { 
    [0] = "a" 
    [1] = "b" 
    [2] = "c" 
} 
+0

Zip2 è una struttura e non una serie di tuple. : \ – alltom

+0

Quando uso la mappa con un intervallo come 'map (0..5) {$ 0}', ottengo un array avvolgendolo come 'Array (map (0..5) {$ 0})'. Sto cercando la trasformazione simile per il generatore Zip2 (credo). – alltom

+0

Quindi non usare Zip2. :-) È chiaramente un hold-over dai giorni Objective-C in cui le tuple non esistevano come oggetti di prima classe. – GoZoner

Problemi correlati