2015-03-23 9 views
36

Jestem nowy w Swift. Robiłem programowanie w Javie. Mam scenariusz do kodu w Swift.Powtarzaj jednocześnie dwie macierze.

Następujący kod znajduje się w Javie. Muszę kod w Swift na poniższym scenariuszu

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

Mam kilka tablic w Swift

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. 

mógłbyś podać Pomoc w składni do pętli na podstawie indeksu

+0

Twój kod Java jest niebezpieczne, aby rozpocząć, ponieważ zakłada, że ​​strArr2 jest taki sam lub dłuższy niż StrArr1 (który w trudnych kodowane tablic masz prace, ale w kodzie gdzie tablice mogłyby się zmienić, nie działałyby). –

+0

Tak, kod java jest tylko przykładem. Mamy sprawdzić, czy strArr1.length == strArr2.length, w przeciwnym razie zwracamy. – Lohith

Odpowiedz

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

To powinno wystarczyć. Nigdy wcześniej nie używałeś szybkiego, więc sprawdź.

+0

Cool it works, Thanks – Lohith

+3

Styl C dla pętli jest przestarzały w Swift 3.0. – PopKernel

+0

Dzięki @PopKernel, opublikowałem to zanim Swift 3.0 był niedostępny. – Erik

12

można również enumerate na jednej tablicy i stosowane indeks zajrzeć do wnętrza drugiej tablicy:

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

Wprowadzono zmiany do metody strArr1.enumerate() w najnowszej wersji Swift. – robhasacamera

0

Możesz użyć numeru Range, jeśli nadal chcesz używać 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

Lub krótszy: dla i w 0 ..

82

Można użyć zip(), który tworzy sekwencję par z dwóch podanych sekwencji:

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

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

Sekwencja wylicza tylko „wspólne elementy” danej sekwencji/tablic. Jeśli mają one inną długość, to dodatkowe elementy dłuższej macierzy/sekwencji są po prostu ignorowane.

+0

Więc zip() ma 2 tablice i zwraca tablicę krotek wspólnych elementów w obu tablicach? Czy 'zip()' swift 2 jest składnią, czy też 'zip2'? Twoje pierwsze zdanie sugeruje, że 'zip' jest szybką składnią 1.2, ale ostatni bit sprawia, że ​​brzmi jak' zip' jest składnią Swift 2. –

+0

@DuncanC: Masz rację, ostatnia edycja była myląca. Funkcja 'zip()' działa zarówno w Swift 1.2, jak i Swift 2, zmienia się tylko podstawowy typ sekwencji z 'Zip2' na' Zip2Sequence'.- Wykonuje dwie sekwencje (tablice są tylko specjalnym przypadkiem) i zwraca (leniwie ocenianą) sekwencję z krotkami wspólnych elementów. –

8

Spróbuj to:

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

świetne, szybkie podejście, dzięki! – brainray