U ovom ćete članku naučiti o petlji for-in, njezinim slučajevima upotrebe i varijantama.
Petlje za ulazak koriste se za pokretanje skupa zadataka određeni broj puta. Te se petlje ponavljaju nad bilo kojim sekvencama, poput stavki u nizu, rasponu ili znakovima u nizu.
Također koristimo for-in petlju kako bismo radili neke ponavljajuće procese određeno vrijeme.
Zašto nam treba petlja za ulazak?
Zamislite da vam je netko rekao da napišete program koji će proizvesti Hello, World! na ekranu. Vaše rješenje bit će:
print ("Zdravo, Svijete!")
Što ako bi se predomislili i rekli vam da napišete program koji će proizvesti Hello, World! na zaslonu pet puta … Bez znanja o petlji vaše bi rješenje moglo biti:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Izgleda dugo vremena da se sličan kôd napiše pet puta da bi se postigao isti posao. Ako je tako, što biste učinili ako netko zatraži da napišete program koji daje rezultate Hello, World! na ekranu stotinu ili čak milijun puta?
Jedno naivno rješenje je napisati print
izjavu za zadani broj puta. Zvuči ludo, zar ne? Ali za to postoji bolje rješenje s upotrebom for-in
petlji s nekoliko redaka koda kao:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Ne brinite se zbog sintakse, istražit ćemo je u nastavku.
Sintaksa petlje za ulazak
Možete stvoriti for in petlju u Swiftu kao:
jer u ()
Gornja petlja ponavlja se kroz raspon i možemo pristupiti svakom elementu vraćenom iz raspona u varijabli. Ako ne znate o dometu, možete provjeriti članak: Brzi dometi.
Kako radi?
- Slijed koji se ponavlja je a.
- Postavlja se na prvi broj u rasponu i izvršavaju se izrazi unutar petlje.
- Nakon izvršavanja izraza, ažurira se tako da sadrži drugu vrijednost u i iskaz se ponovno izvršava.
- Ovaj se postupak nastavlja dok se ne dosegne kraj raspona i petlja se zaustavi.
Primjer 1: Kako petlja for-in radi u Swiftu
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Kada pokrenete program, izlaz će biti:
Pozdrav svijete!. Vrijednost je 1 Pozdrav svijete !. Vrijednost je 2 Pozdrav svijete !. Vrijednost je 3
U gore navedenom programu, niz koji se ponavlja je u rasponu od 1 do 3.
Vrijednost i postavlja se na prvi broj u rasponu (1) i ažurira na sljedeći broj raspona na svakoj iteraciji. Taj se postupak nastavlja dok se ne dosegne kraj raspona (3).
Koraci izvršenja petlje za ulazakIteracija | Vrijednost vraćena iz raspona (i) | Izlaz |
---|---|---|
1 | 1 | Pozdrav svijete!. Vrijednost je 1 |
2 | 2 | Pozdrav svijete!. Vrijednost je 2 |
3 | 3 | Pozdrav svijete!. Vrijednost je 3 |
Odbacivanje vrijednosti raspona u ulaznoj petlji
Ako nemate koristi za vrijednost raspona unutar petlje, možete odbaciti pomoću _
(podvlaka) u Swiftu kao:
za _ u ()
Primjer 2: Odbacivanje vrijednosti raspona u ulaznoj petlji
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Kada pokrenete program, izlaz će biti:
Pozdrav svijete! Pozdrav svijete!
U gornjem programu, ponavljani niz je u rasponu od 1 do 2 zbog upotrebe operatora poluotvorenog raspona (… <) koji uključuje donju granicu (1), ali ne i gornju granicu (3).
_
zanemaruje vrijednost iz raspona (1) i izvršava se izraz ispisa. Izvod za ispis ponovno se poziva za sljedeću iteraciju i postupak završava jer je 2 zadnja vrijednost u rasponu.
Iteracija | Vrijednost vraćena iz raspona | Izlaz |
---|---|---|
1 | Odbačeno | Pozdrav svijete! |
2 | Odbačeno | Pozdrav svijete! |
petlja za fiksne intervale pomoću koraka
Ako želite petlju koja se uvećava za neku fiksnu vrijednost u svakoj iteraciji, umjesto opsega, morate koristiti metodu koraka.
Primjer 3: petlja za ulazak metodom koraka
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Kada pokrenete program, izlaz će biti:
1 3 5 7 9
U gornjem programu stride
funkcija vraća slijed brojeva: 1, 3, 5, 7, 9.
Vrijednost i postavlja se na prvi broj sekvence (1), a izvršava se ispis unutar petlje koji na konzoli izbacuje "1".
Nakon izvršavanja izraza, vrijednost i se ažurira na drugu vrijednost (3) i ispisni izraz se ponovno poziva. Taj se postupak nastavlja sve dok se ne pristupi svim elementima niza.
Koraci izvršenja petlje u obliku korakaVrijednost | Stanje (vrijednost <kraj) | i (izlaz) |
---|---|---|
1 | 1 <10 (točno) | 1 |
1 + 2 = 3 | 3 <10 (točno) | 3 |
1 + 2 * 2 = 5 | 5 <10 (točno) | 5 |
1 + 3 * 2 = 7 | 7 <10 (točno) | 7 |
1 + 4 * 2 = 9 | 9 <10 (točno) | 9 |
1 + 5 * 2 = 11 | 11 <10 (netačno) | Zaustavlja se |
Kako pristupiti elementima kolekcije pomoću for-in petlje?
Pretpostavimo da imate niz žica kao što je prikazano u nastavku. Ako ne znate o polju, zamislite ga kao jedan spremnik koji može pohraniti više od jedne vrijednosti. Za detaljnije objašnjenje pogledajte Brzi nizovi.
neka programLanguages = ("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).
vrijednost se postavlja na prvi znak niza i provjerava se s uvjetom where. Ako se uvjet vrati true
, izvršava se blok unutar petlje (ispisni izraz) koji u konzoli izbacuje "I".
Nakon izvršavanja izraza, vrijednost se ažurira na sljedeći znak niza i ponovno se provjerava stanje. Ako se uvjet vrati false
, ne izvršava blok i vrijednost se ažurira na sljedeći znak.
Taj se postupak nastavlja sve dok se ne pristupi posljednjem znaku niza.
Filtrirajte pomoću koraka izvršenja petljeIteracija | vrijednost | vrijednost! = "!" | Izlaz |
---|---|---|---|
1 | Ja | pravi | Ja |
2 | ♥ | pravi | ♥ |
3 | S | pravi | S |
4 | w | pravi | w |
5 | ja | pravi | ja |
6 | f | pravi | f |
7 | t | pravi | t |
8 | ! | lažno |