Szybka pętla for-in: jak jej używać i dlaczego?

W tym artykule poznasz pętlę for-in, jej przypadki użycia i warianty.

Pętle for-in służą do uruchamiania zestawu zadań określoną liczbę razy. Te pętle wykonują iterację po dowolnych sekwencjach, takich jak elementy w tablicy, zakresie lub znaki w ciągu.

Używamy również pętli for-in do wykonywania niektórych powtarzalnych procesów przez określony czas.

Dlaczego potrzebujemy pętli for-in?

Wyobraź sobie, że ktoś kazał ci napisać program, który wyświetla komunikat Hello, World! na ekranie. Twoim rozwiązaniem będzie:

 print ("Witaj świecie!")

Co by było, gdyby zmienili zdanie i powiedzieli ci napisać program, który wypisze Hello, World! na ekranie pięć razy… Bez znajomości pętli rozwiązaniem może być:

 print ("Witaj świecie!") print ("Witaj świecie!") print ("Witaj świecie!") print ("Witaj świecie!") print ("Witaj świecie!")

Hmm. Wydaje się, że pisanie podobnego kodu pięć razy w celu wykonania tej samej pracy jest czasochłonne. Jeśli tak, co byś zrobił, gdyby ktoś poprosił Cię o napisanie programu wyświetlającego komunikat Hello, World! na ekranie sto, a nawet milion razy?

Naiwnym rozwiązaniem jest napisanie printoświadczenia określoną liczbę razy. Brzmi szalenie, prawda? Ale jest na to lepsze rozwiązanie z użyciem for-inpętli z kilkoma wierszami kodu, takimi jak:

 for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") ) 

Nie martw się o składnię, zbadamy to poniżej.

Składnia pętli for-in

Możesz utworzyć pętlę for in w Swift jako:

 dla w ( ) 

Powyższa pętla iteruje po zakresie i możemy uzyskać dostęp do każdego elementu zwróconego z zakresu w zmiennej. Jeśli nie znasz zasięgu, zajrzyj do artykułu: Swift Ranges.

Jak to działa?

  • Iterowana sekwencja to.
  • Jest ustawiana na pierwszą liczbę w zakresie i wykonywane są instrukcje wewnątrz pętli.
  • Po wykonaniu instrukcji, jest ona aktualizowana i zawiera drugą wartość w, a instrukcja jest wykonywana ponownie.
  • Ten proces trwa do osiągnięcia końca zakresu i pętli zatrzymuje się.

Przykład 1: Jak działa pętla for-in w języku Swift

 for i in 1… 3 ( print("Hello world!. Value is (i)") ) 

Po uruchomieniu programu wynik będzie następujący:

Witaj świecie!. Wartość to 1 Witaj, świecie !. Wartość to 2 Witaj, świecie !. Wartość to 3

W powyższym programie iterowana sekwencja ma zakres od 1 do 3.

Wartość i jest ustawiana na pierwszą liczbę z zakresu (1) i aktualizowana do następnej liczby zakresu w każdej iteracji. Ten proces trwa aż do osiągnięcia końca zakresu (3).

Kroki wykonywania pętli for-in
Iteracja Wartość zwrócona z zakresu (i) Wynik
1 1 Witaj świecie!. Wartość to 1
2 2 Witaj świecie!. Wartość to 2
3 3 Witaj świecie!. Wartość to 3

Odrzucenie wartości zakresu w pętli for-in

Jeśli nie używasz wartości zakresu wewnątrz pętli, możesz odrzucić, używając _(podkreślenia) w Swift jako:

 dla w ( ) 

Przykład 2: Odrzucanie wartości zakresu w pętli for-in

 // This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") ) 

Po uruchomieniu programu wynik będzie następujący:

Witaj świecie! Witaj świecie!

W powyższym programie iterowana sekwencja jest z zakresu od 1 do 2 z powodu użycia operatora półotwartego zakresu (… <), który obejmuje dolną granicę (1), ale nie górną granicę (3).

_pomija wartość z przedziału (1) i wykonywana jest instrukcja print. Instrukcja print jest wywoływana ponownie dla następnej iteracji i proces kończy się, ponieważ 2 jest ostatnią wartością w zakresie.

Kroki wykonywania pętli for-in bez wartości zakresu
Iteracja Wartość zwrócona z zakresu Wynik
1 Odrzucona Witaj świecie!
2 Odrzucona Witaj świecie!

pętla for-in dla stałych interwałów za pomocą kroku

Jeśli chcesz, aby pętla zwiększała się o pewną stałą wartość w każdej iteracji, zamiast o zakres, musisz użyć metody krokowej.

Przykład 3: pętla for-in przy użyciu metody stride

 let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) ) 

Po uruchomieniu programu wynik będzie następujący:

 1 3 5 7 9 

W powyższym programie stridefunkcja zwraca ciąg liczb: 1, 3, 5, 7, 9.

Wartość i jest ustawiana na pierwszą liczbę sekwencji (1), a instrukcja print wewnątrz pętli jest wykonywana, co daje wynik „1” w konsoli.

Po wykonaniu instrukcji wartość i jest aktualizowana do innej wartości (3) i ponownie wywoływana jest instrukcja print. Ten proces trwa do momentu uzyskania dostępu do wszystkich elementów sekwencji.

Kroki wykonywania pętli for-in przy użyciu stride
Wartość Warunek (wartość <koniec) i (wyjście)
1 1 <10 (prawda) 1
1 + 2 = 3 3 <10 (prawda) 3
1 + 2 * 2 = 5 5 <10 (prawda) 5
1 + 3 * 2 = 7 7 <10 (prawda) 7
1 + 4 * 2 = 9 9 <10 (prawda) 9
1 + 5 * 2 = 11 11 <10 (fałsz) Zatrzymuje się

Jak uzyskać dostęp do elementów kolekcji za pomocą pętli for-in?

Załóżmy, że masz tablicę ciągów, jak poniżej. Jeśli nie wiesz o tablicy, potraktuj tablicę jako pojedynczy kontener, który może przechowywać więcej niż jedną wartość. Aby uzyskać bardziej szczegółowe wyjaśnienia, zobacz Swift Arrays.

 letmingLanguages ​​= („Swift”, „Java”, „Go”, „JavaScript”, „Kotlin”, „Python”)

What if someone told you to print all the programming languages?

A way is to access those elements using index as programmingLanguages(0), programmingLanguages(1)… and so on till you get all the elements. But this is too tedious.

Here comes for-in loop to the rescue. You can iterate using for in loop as:

Example 4: Accessing elements of an array (collection) using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for language in programmingLanguages ( print(language) ) 

When you run the program, the output will be:

 Swift Java Go JavaScript Kotlin Python 

In the above program, the sequence being iterated over is an array of strings.

The value of language is set to the first element of the array, and the print statement inside the loop is executed which outputs "Swift" in the console.

After the statement is executed, language is updated with the next element of the array and the print statement is called again. This process continues until the last element of array is accessed.

Example 5: Accessing elements of a string (collection) using for-in loop

Since, in Swift, strings are also collection, you can access each character in a string using for loop.

 for value in "I♥Swift!" ( print(value) ) 

When you run the program, the output will be:

 I ♥ S w i f t ! 

How to access indices of a collection using for-in loop?

If you want to access the index of the array (position of elements in an array i.e. 0, 1, 2), you need to use enumerated method as:

Example 6: Accessing indices of an array using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for (index, language) in programmingLanguages.enumerated() ( print("(index):(language)") ) 

When you run the program, the output will be:

 0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python 

Here, the enumerated method returns a tuple (Int, String) composed of the index (Int) and the value (String) for each item in the array. For example: (0, Swift), (1, Java)…

Using for-in loop, you can access these items in a tuple one by one. If you don't know about Tuple, you can simply think it as a container that can hold value of different types. For more detailed explanation, see Swift Tuples .

How to filter elements using where clause in a for-in loop?

You can also filter contents from for in loop using where clause as

 for value in "I♥Swift!" where value != "!" ( print(value) //removes exclamation sign ) 

When you run the program, the output will be:

 I ♥ S w i f t 

In the above program, the sequence being iterated over is string (collection of characters).

value jest ustawiana na pierwszy znak ciągu i jest sprawdzana z warunkiem where. Jeśli warunek zostanie zwrócony true, wykonywany jest blok wewnątrz pętli (instrukcja print), który wyświetla „I” w konsoli.

Po wykonaniu instrukcji wartość jest aktualizowana do następnego znaku ciągu i ponownie sprawdzany jest warunek. Jeśli warunek powróci false, blok nie zostanie wykonany, a wartość zostanie zaktualizowana do następnego znaku.

Ten proces jest kontynuowany do momentu uzyskania dostępu do ostatniego znaku ciągu.

Filtruj za pomocą kroków wykonywania pętli for-in
Iteracja wartość wartość! = „!” Wynik
1 ja prawdziwe ja
2 prawdziwe
3 S prawdziwe S
4 w prawdziwe w
5 ja prawdziwe ja
6 fa prawdziwe fa
7 t prawdziwe t
8 ! fałszywy

Interesujące artykuły...