2015-03-23 4 views
36

Sono nuovo di Swift. Ho fatto programmazione Java. Ho uno scenario da programmare in Swift.Iterate su due array contemporaneamente

Il seguente codice è in Java. Ho bisogno di codice a Swift per il seguente scenario

// With String array - strArr1 
String strArr1[] = {"Some1","Some2"} 

String strArr2[] = {"Somethingelse1","Somethingelse2"} 

for(int i=0;i< strArr1.length;i++){ 
    System.out.println(strArr1[i] + " - "+ strArr2[i]); 
} 

Ho un paio di matrici in rapida

var strArr1: [String] = ["Some1","Some2"] 
var strArr2: [String] = ["Somethingelse1","Somethingelse2"] 

for data in strArr1{ 
    println(data) 
} 

for data in strArr2{ 
    println(data) 
} 
// I need to loop over in single for loop based on index. 

La prego di fornire il proprio aiuto alle sintassi per un ciclo su base dell'indice

+0

il codice Java non è sicuro per cominciare, in quanto presuppone che strArr2 è la stessa lunghezza o più di StrArr1 (che negli array hard-coded avete opere, ma nel codice dove gli array potrebbero cambiare, non funzionerebbe). –

+0

Sì, il codice java è solo un esempio. Abbiamo un controllo se strArr1.length == strArr2.length, altrimenti restituiamo. – Lohith

risposta

-2
for(var i = 0; i < strArr1.count ; i++) 
{ 
    println(strArr1[i] + strArr2[i]) 
} 

Che dovrebbe farlo. Mai usato prima, quindi assicurati di testare.

+0

Cool funziona, Grazie – Lohith

+3

C-style per i loop sono deprecati in Swift 3.0. – PopKernel

+0

Grazie a @PopKernel, pubblicato prima che Swift 3.0 fosse fuori. – Erik

12

Si potrebbe anche enumerate più di un array e utilizzato l'indice di guardare dentro il secondo array:

Swift 1.2:

for (index, element) in enumerate(strArr1) { 
    println(element) 
    println(strArr2[index]) 
} 

Swift 2:

for (index, element) in strArr1.enumerate() { 
    print(element) 
    print(strArr2[index]) 
} 

Swift 3:

for (index, element) in strArr1.enumerated() { 
    print(element) 
    print(strArr2[index]) 
} 
+0

Questo ha modifiche a strArr1.enumerate() nell'ultima versione di swift. – robhasacamera

0

È possibile utilizzare Range se si desidera utilizzare ancora for in.

var strArr1: [String] = ["Some1","Some2"] 
var strArr2: [String] = ["Somethingelse1","Somethingelse2"] 

for i in Range(start: 0, end: strArr1.count) { 
    println(strArr1[i] + " - " + strArr2[i]) 
} 
+0

Oppure più breve: per i in 0 ..

82

È possibile utilizzare zip(), che crea una sequenza di coppie dai due dati sequenze:

let strArr1 = ["Some1", "Some2"] 
let strArr2 = ["Somethingelse1", "Somethingelse2"] 

for (e1, e2) in zip(strArr1, strArr2) { 
    print("\(e1) - \(e2)") 
} 

La sequenza enumera solo i "elementi comuni" dei trovati sequenze/array. Se hanno una lunghezza diversa, gli ulteriori elementi dell'array/sequenza più lunghi vengono semplicemente ignorati.

+0

Quindi zip() richiede 2 matrici e restituisce una serie di tuple di elementi comuni in entrambi gli array? La sintassi 'zip()' swift 2 o 'zip2'? La prima frase implica che 'zip' è la sintassi swift 1.2, ma l'ultimo bit lo fa sembrare' zip' è la sintassi Swift 2. –

+0

@DuncanC: hai ragione, l'ultima modifica era fuorviante. La funzione 'zip()' funziona sia in Swift 1.2 che in Swift 2, solo il tipo di sequenza sottostante cambiato da 'Zip2' a' Zip2Sequence'.- Prende due sequenze (gli array sono solo un caso speciale) e restituisce una sequenza (calcolata pigramente) con le tuple degli elementi comuni. –

8

Try This:

zip([0,2,4,6], [1,3,5,7]).forEach { 
    print($0,$1) 
} 

zip([0,2,4,6], [1,3,5,7]).forEach { 
    print($0.0,$0.1) 
} 
+0

ottimo approccio swifty, grazie! – brainray