2015-03-23 2 views
36

Ich bin neu in Swift. Ich habe Java-Programmierung gemacht. Ich habe ein Szenario in Swift zu kodieren.Iterate über zwei Arrays gleichzeitig

Der folgende Code ist in Java. Ich brauche in Swift für das folgende Szenario codieren

// 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]); 
} 

Ich habe ein paar von Arrays in schnellen

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. 

Könnten Sie bitte für Ihre Hilfe zu den Syntaxen bieten Schleifen über basierend auf Index

+0

Ihr Java-Code unsicher ist zu beginnen, da es davon ausgeht, dass strArr2 die gleiche Länge oder länger als StrArr1 (die in der hartcodierte Arrays Sie arbeiten, aber in Code wo die Arrays ändern könnten, würde nicht funktionieren). –

+0

Ja, der Java-Code ist nur ein Beispiel. Wir haben eine Überprüfung, ob strArr1.length == strArr2.length, sonst kommen wir zurück. – Lohith

Antwort

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

das sollte es tun. Niemals zuvor schnell benutzt, also testen Sie es.

+0

Cool es funktioniert, Danke – Lohith

+3

C-style For-Schleifen sind in Swift 3.0 veraltet. – PopKernel

+0

Danke @PopKernel, gepostet vor Swift 3.0 war out. – Erik

12

Sie könnten auch enumerate über ein Array und verwendet, um den Index in der zweiten Reihe zu suchen:

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

Dies hat Änderungen an strArr1.enumerate() in der neuesten Version von swift. – robhasacamera

0

Sie könnten Range verwenden, wenn Sie noch verwenden for in wollen.

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

Oder kürzer: für i in 0 ..

82

Sie können zip() verwenden, die eine Folge von Paaren aus den beiden angegebenen Sequenzen erstellt:

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

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

Die Sequenz nur die „gemeinsame Elemente“ der gegebenen Sequenzen/Arrays aufzählt. Wenn sie unterschiedliche Länge haben, werden die zusätzlichen Elemente des längeren Arrays/Sequenz einfach ignoriert.

+0

So zip() nimmt zwei Arrays und gibt ein Array von Tupeln gemeinsamer Elemente in beiden Arrays? Ist 'zip()' swift 2 Syntax, oder ist 'zip2'? Der erste Satz impliziert, dass "zip" die schnelle 1.2-Syntax ist, aber das letzte Bit klingt wie "zip" ist die Swift 2-Syntax. –

+0

@DuncanC: Sie haben Recht, die letzte Änderung war irreführend. Die Funktion 'zip()' funktioniert sowohl in Swift 1.2 als auch in Swift 2, nur der zugrunde liegende Sequenztyp wurde von 'Zip2' in' Zip2Sequence' geändert.- Es dauert zwei Sequenzen (Arrays sind nur ein Sonderfall) und gibt eine (faul ausgewertete) Sequenz mit den Tupeln der gemeinsamen Elemente zurück. –

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

große swifty Ansatz, danke! – brainray