În acest articol, veți afla despre bucla for-in, cazurile de utilizare și variantele acesteia.
Buclele For-in sunt utilizate pentru a rula un set de activități de un anumit număr de ori. Aceste bucle repetă orice secvență, cum ar fi elementele dintr-o matrice, un interval sau caractere dintr-un șir.
De asemenea, folosim bucla for-in pentru a face unele procese repetitive pentru o perioadă fixă de timp.
De ce avem nevoie de buclă de intrare?
Imaginați-vă că cineva v-a spus să scrieți un program care să producă Salut, Lumea! în ecran. Soluția dvs. va fi:
print („Bună ziua, lume!”)
Ce se întâmplă dacă s-au răzgândit și ți-ar spune să scrii un program care să producă Salut, Lumea! în ecran de cinci ori … Fără cunoștința buclei, soluția dvs. ar putea fi:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Se pare consumator de timp pentru a scrie cod similar de cinci ori pentru a realiza aceeași muncă. Dacă da, ce ați face dacă cineva vă solicită să scrieți un program care să producă Hello, World! în ecran de sute sau chiar de milioane de ori?
O soluție naivă este de a scrie print
declarația de un număr dat de ori. Sună nebunesc, nu? Dar există o soluție mai bună pentru acest lucru cu utilizarea for-in
buclelor cu câteva linii de cod ca:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Nu vă faceți griji cu privire la sintaxă, o vom explora mai jos.
Sintaxa Loop For-in
Puteți crea o buclă pentru în Swift ca:
pentru in ()
Bucla de mai sus iterează într-un interval și putem accesa fiecare element returnat din interval în variabilă. Dacă nu știți despre raza de acțiune, puteți verifica articolul: Swift Ranges.
Cum functioneaza?
- Secvența care este iterată este a.
- Este setat la primul număr din interval și se execută instrucțiunile din buclă.
- După ce instrucțiunea este executată, este actualizată pentru a conține a doua valoare în și instrucțiunea este executată din nou.
- Acest proces continuă până când se atinge sfârșitul intervalului și bucla se oprește.
Exemplul 1: Cum funcționează bucla de intrare în Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Când rulați programul, ieșirea va fi:
Salut Lume!. Valoarea este 1 Hello world !. Valoarea este 2 Hello world !. Valoarea este 3
În programul de mai sus, secvența care este repetată este cuprinsă între 1 și 3.
Valoarea lui i este setată la primul număr din interval (1) și actualizată la următorul număr al intervalului de pe fiecare iterație. Acest proces continuă până când se atinge sfârșitul intervalului (3).
Pași de execuție pentru buclă de intrareRepetare | Valoare returnată din intervalul (i) | Ieșire |
---|---|---|
1 | 1 | Salut Lume!. Valoarea este 1 |
2 | 2 | Salut Lume!. Valoarea este 2 |
3 | 3 | Salut Lume!. Valoarea este 3 |
Eliminarea valorii intervalului într-o buclă de intrare
Dacă nu aveți nicio utilizare pentru valoarea intervalului din interiorul buclei, puteți renunța folosind _
(subliniere) în Swift ca:
pentru _ in ()
Exemplul 2: Eliminarea valorii intervalului în bucla for-in
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Când rulați programul, ieșirea va fi:
Salut Lume! Salut Lume!
În programul de mai sus, secvența care este repetată este un interval de la 1 la 2 din cauza utilizării operatorului de gamă pe jumătate deschisă (… <) care include limita inferioară (1) dar nu limita superioară (3).
_
neglijează valoarea din intervalul (1) și se execută instrucțiunea de tipărire. Declarația de tipărire este apelată din nou pentru următoarea iterație și procesul se încheie deoarece 2 este ultima valoare din interval.
Repetare | Valoare returnată din interval | Ieșire |
---|---|---|
1 | Aruncat | Salut Lume! |
2 | Aruncat | Salut Lume! |
bucla for-in pentru intervale fixe folosind stride
Dacă doriți o buclă care crește cu o anumită valoare fixă în fiecare iterație, în loc de interval, trebuie să utilizați metoda stride.
Exemplul 3: bucla for-in folosind metoda stride
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Când rulați programul, ieșirea va fi:
1 3 5 7 9
În programul de mai sus, stride
funcția returnează succesiunea numerelor: 1, 3, 5, 7, 9.
Valoarea lui i este setată la primul număr al secvenței (1) și se execută instrucțiunea de tipărire din interiorul buclei care scoate „1” în consolă.
După executarea instrucțiunii, valoarea lui i este actualizată la o altă valoare (3) și se apelează din nou instrucțiunea print. Acest proces continuă până când toate elementele secvenței sunt accesate.
Pași de execuție pentru buclă de intrare folosind strideValoare | Stare (valoare <sfârșit) | i (ieșire) |
---|---|---|
1 | 1 <10 (adevărat) | 1 |
1 + 2 = 3 | 3 <10 (adevărat) | 3 |
1 + 2 * 2 = 5 | 5 <10 (adevărat) | 5 |
1 + 3 * 2 = 7 | 7 <10 (adevărat) | 7 |
1 + 4 * 2 = 9 | 9 <10 (adevărat) | 9 |
1 + 5 * 2 = 11 | 11 <10 (fals) | Se oprește |
Cum se accesează elementele unei colecții folosind bucla for-in?
Să presupunem că aveți o serie de șiruri ca mai jos. Dacă nu știți despre matrice, gândiți-vă la matrice ca la un singur container care poate stoca mai multe valori. Pentru explicații mai detaliate, consultați Swift Arrays.
permite programareaLanguages = ("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).
valoarea este setată la primul caracter al șirului și se verifică cu condiția unde. Dacă condiția revine true
, se execută blocul din buclă (instrucțiunea de tipărire) care scoate „I” în consolă.
După executarea instrucțiunii, valoarea este actualizată la următorul caracter al șirului și se verifică din nou starea. Dacă condiția revine false
, nu execută blocul și valoarea este actualizată la următorul caracter.
Acest proces continuă până la accesarea ultimului caracter al șirului.
Filtrați utilizând pașii de execuție pentru bucla de intrareRepetare | valoare | valoare! = „!” | Ieșire |
---|---|---|---|
1 | Eu | Adevărat | Eu |
2 | ♥ | Adevărat | ♥ |
3 | S | Adevărat | S |
4 | w | Adevărat | w |
5 | eu | Adevărat | eu |
6 | f | Adevărat | f |
7 | t | Adevărat | t |
8 | ! | fals |