Zaktualizowano dla Swift 3
Odpowiedź poniżej jest podsumowaniem dostępnych opcji. Wybierz ten, który najlepiej odpowiada Twoim potrzebom.
reversed
: liczby w zakresie
Naprzód
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Do tyłu
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: elementy w SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Naprzód
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
Do tyłu
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: elementy z indeksem
Czasami potrzebny jest indeks podczas iteracji po kolekcji. Do tego możesz użyć enumerate()
, który zwraca krotkę. Pierwszym elementem krotki jest indeks, a drugim elementem jest obiekt.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Naprzód
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
Do tyłu
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Zauważ, że jak zauważył Ben Lachman w swojej odpowiedzi , prawdopodobnie .enumerated().reversed()
raczej chcesz to zrobić .reversed().enumerated()
(co spowodowałoby wzrost liczby indeksów).
krok: liczby
Krok jest sposobem na iterację bez użycia zakresu. Istnieją dwie formy. Komentarze na końcu kodu pokazują, jaka byłaby wersja zakresu (przy założeniu, że wielkość przyrostu wynosi 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Naprzód
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Do tyłu
Zmiana wielkości przyrostu na -1
pozwala cofnąć się.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Zauważ, że to
i through
różnicę.
stride: elementy SequenceType
Do przodu o 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Używam 2
w tym przykładzie, aby pokazać inną możliwość.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
Do tyłu
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Notatki