V tomto článku sa dozviete o slučke for-in, jej prípadoch použitia a variantoch.
Slučky for-in sa používajú na spustenie množiny úloh určitý čas. Tieto slučky iterujú nad ľubovoľnými sekvenciami, ako sú položky v poli, rozsahu alebo znaky v reťazci.
Taktiež používame slučku for-in na vykonávanie niektorých opakujúcich sa procesov po pevne stanovený čas.
Prečo potrebujeme vstupnú slučku?
Predstavte si, že vám niekto povedal, aby ste napísali program s výstupom Hello, World! na obrazovke. Vaše riešenie bude:
print („Ahoj, svet!“)
Čo ak, zmenili názor a povedali vám, aby ste napísali program s výstupom Hello, World! na obrazovke päťkrát … Bez znalosti slučky môže byť vaše riešenie:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Zdá sa byť časovo náročné písať podobný kód päťkrát, aby ste dosiahli rovnakú prácu. Ak je to tak, čo by ste robili, keby vás niekto požiadal o napísanie programu s výstupom Hello, World! na obrazovke stokrát alebo dokonca miliónkrát?
Jedným z naivných riešení je napísať print
vyhlásenie viackrát. Znie to šialene, však? Existuje však lepšie riešenie, keď sa použijú for-in
slučky s niekoľkými riadkami kódu ako:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Nerobte si starosti so syntaxou, nižšie ju preskúmame.
Syntax vstupnej slučky
Smyčku for in môžete v Swifte vytvoriť ako:
pre v ()
Vyššie uvedená slučka iteruje v rozsahu a my máme prístup ku každému prvku vrátenému z rozsahu v premennej. Ak neviete o rozsahu, môžete si prečítať článok: Swift Ranges.
Ako to funguje?
- Sekvencia, ktorá sa iteruje, je a.
- Symbol je nastavený na prvé číslo v rozsahu a vykonajú sa príkazy vo vnútri cyklu.
- Po vykonaní príkazu sa znak aktualizuje tak, aby obsahoval druhú hodnotu v príkazovom riadku, a príkaz sa vykoná znova.
- Tento proces pokračuje, kým sa nedosiahne koniec rozsahu a slučka sa nezastaví.
Príklad 1: Ako funguje slučka for-in v aplikácii Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Po spustení programu bude výstup:
Ahoj svet !. Hodnota je 1 Hello world !. Hodnota je 2 Hello world !. Hodnota je 3
Vo vyššie uvedenom programe je sekvencia, v ktorej sa iteruje, v rozsahu od 1 do 3.
Hodnota i je nastavená na prvé číslo v rozsahu (1) a pri každej iterácii sa aktualizuje na ďalšie číslo rozsahu. Tento proces pokračuje, kým sa nedosiahne koniec rozsahu (3).
Kroky vykonania slučky For-inIterácia | Hodnota vrátená z rozsahu (i) | Výkon |
---|---|---|
1 | 1 | Ahoj svet !. Hodnota je 1 |
2 | 2 | Ahoj svet !. Hodnota je 2 |
3 | 3 | Ahoj svet !. Hodnota je 3 |
Zahodenie hodnoty rozsahu v slučke for-in
Ak hodnotu rozsahu vo vnútri slučky nemáte k dispozícii, môžete ju zahodiť pomocou _
(podčiarknutia) v Swifte ako:
pre _ v ()
Príklad 2: Zahodenie hodnoty rozsahu v cykle for-in
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Po spustení programu bude výstup:
Ahoj svet! Ahoj svet!
Vo vyššie uvedenom programe je sekvencia, v ktorej sa iteruje, rozsah od 1 do 2 z dôvodu použitia operátora polootvoreného rozsahu (… <), ktorý obsahuje dolnú hranicu (1), ale nie hornú hranicu (3).
_
zanedbá hodnotu z rozsahu (1) a vykoná sa tlačový príkaz. Príkaz pre tlač sa znova zavolá pre ďalšiu iteráciu a proces sa končí, pretože 2 je posledná hodnota v rozsahu.
Iterácia | Hodnota vrátená z rozsahu | Výkon |
---|---|---|
1 | Vyradené | Ahoj svet! |
2 | Vyradené | Ahoj svet! |
slučka pre vstup do pevných intervalov pomocou kroku
Ak chcete slučku, ktorá v každej iterácii zvyšuje o určitú pevnú hodnotu, musíte namiesto rozsahu použiť metódu stride.
Príklad 3: slučka for-in pomocou metódy kroku
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Po spustení programu bude výstup:
1 3 5 7 9
Vo vyššie uvedenom programe stride
funkcia vráti postupnosť čísel: 1, 3, 5, 7, 9.
Hodnota i je nastavená na prvé číslo sekvencie (1) a vykoná sa príkaz na tlač vo vnútri slučky, ktorý v konzole vydá výstup „1“.
Po vykonaní príkazu sa hodnota i aktualizuje na inú hodnotu (3) a príkaz na tlač sa znovu vyvolá. Tento proces pokračuje, kým nie sú prístupné všetky prvky sekvencie.
Kroky vykonania slučky vopred pomocou krokuHodnota | Podmienka (hodnota <koniec) | i (výstup) |
---|---|---|
1 | 1 <10 (pravda) | 1 |
1 + 2 = 3 | 3 <10 (pravda) | 3 |
1 + 2 * 2 = 5 | 5 <10 (pravda) | 5 |
1 + 3 * 2 = 7 | 7 <10 (pravda) | 7 |
1 + 4 * 2 = 9 | 9 <10 (pravda) | 9 |
1 + 5 * 2 = 11 | 11 <10 (nepravdivé) | Zastávky |
Ako získať prístup k prvkom kolekcie pomocou slučky for-in?
Predpokladajme, že máte pole reťazcov, ako je uvedené nižšie. Ak neviete o poli, predstavte si pole ako jeden kontajner, ktorý dokáže uložiť viac ako jednu hodnotu. Podrobnejšie vysvetlenie nájdete v časti Swift Arrays.
let programovanieJazyky = ("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).
hodnota je nastavená na prvý znak reťazca a je kontrolovaná podmienkou kde. Ak sa podmienka vráti true
, vykoná sa blok vo vnútri slučky (príkaz na tlač), z ktorého sa v konzole zobrazí „I“.
Po vykonaní príkazu sa hodnota aktualizuje na ďalší znak reťazca a opäť sa skontroluje stav. Ak sa podmienka vráti false
, blok sa nespustí a hodnota sa aktualizuje na ďalší znak.
Tento proces pokračuje, kým sa nezistí posledný znak reťazca.
Filtrujte pomocou krokov vykonania slučky for-inIterácia | hodnotu | hodnota! = “!” | Výkon |
---|---|---|---|
1 | Ja | pravda | Ja |
2 | ♥ | pravda | ♥ |
3 | S | pravda | S |
4 | w | pravda | w |
5 | i | pravda | i |
6 | f | pravda | f |
7 | t | pravda | t |
8 | ! | nepravdivé |