V tem članku boste izvedeli več o zanki for-in, njenih primerih uporabe in različicah.
Vhodne zanke se uporabljajo za izvajanje nabora nalog določeno število krat. Te zanke se ponovijo po vseh sekvencah, kot so elementi v polju, obsegu ali znaki v nizu.
Z zanko for-in uporabljamo tudi nekaj ponavljajočih se postopkov za določen čas.
Zakaj potrebujemo vhodno zanko?
Predstavljajte si, da vam je nekdo rekel, da napišete program, ki bo izšel Hello, World! na zaslonu. Vaša rešitev bo:
print ("Pozdravljen, svet!")
Kaj pa, če so si premislili in rekli, naj napišete program, ki bo izpisal Hello, World! na zaslonu petkrat … Brez vedenja zanke je lahko vaša rešitev:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Če želite isto delo petkrat napisati podobno kodo, je zamudno. Če je odgovor pritrdilen, kaj bi storili, če nekdo od vas zahteva, da napišete program, ki oddaja Hello, World! na zaslonu sto ali celo milijonkrat?
Ena naivna rešitev je zapis print
izjave za določeno število krat. Sliši se noro, kajne? Toda za to obstaja boljša rešitev z uporabo for-in
zank z nekaj vrsticami kode kot:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Ne skrbite za sintakso, raziskali jo bomo spodaj.
Sintaksa zanke za vhod
Zanko for in v Swiftu lahko ustvarite kot:
za v ()
Zgornja zanka se ponavlja skozi obseg in lahko dostopamo do vsakega elementa, ki se vrne iz obsega v spremenljivko. Če ne veste o dosegu, si lahko ogledate članek: Hitri razponi.
Kako deluje?
- Zaporedje, ki se ponavlja, je a.
- Nastavi se na prvo številko v obsegu, stavki znotraj zanke pa se izvršijo.
- Po izvedbi stavka se posodobi tako, da vsebuje drugo vrednost v in stavek se znova izvede.
- Ta postopek se nadaljuje, dokler ni dosežen konec obsega in se zanka ustavi.
Primer 1: Kako zanka for-in deluje v Swiftu
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Ko zaženete program, bo rezultat:
Pozdravljen, svet!. Vrednost je 1 Hello world !. Vrednost je 2 Hello world !. Vrednost je 3
V zgornjem programu je zaporedje, ki se ponavlja, v razponu od 1 do 3.
Vrednost i je nastavljena na prvo številko v obsegu (1) in posodobljena na naslednjo številko obsega na vsaki ponovitvi. Ta postopek se nadaljuje, dokler ni dosežen konec obsega (3).
Koraki izvajanja v zankiPonavljanje | Vrednost, vrnjena iz obsega (i) | Izhod |
---|---|---|
1. | 1. | Pozdravljen, svet!. Vrednost je 1 |
2. | 2. | Pozdravljen, svet!. Vrednost je 2 |
3. | 3. | Pozdravljen, svet!. Vrednost je 3 |
Zavrnitev vrednosti obsega v vhodni zanki
Če vrednosti zanke znotraj zanke ne uporabljate, jo lahko z uporabo _
(podčrtaj) v Swiftu zavržete kot:
za _ v ()
Primer 2: Zavrnitev vrednosti obsega v vhodni zanki
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Ko zaženete program, bo rezultat:
Pozdravljen, svet! Pozdravljen, svet!
V zgornjem programu je zaporedje, ki se ponavlja, v območju od 1 do 2 zaradi uporabe operatorja na pol odprtega območja (… <), ki vključuje spodnjo mejo (1), ne pa tudi zgornjo mejo (3).
_
zanemari vrednost iz obsega (1) in stavek za tiskanje se izvede. Stavek za tiskanje se ponovno pokliče za naslednjo ponovitev in postopek se konča, ker je 2 zadnja vrednost v obsegu.
Ponavljanje | Vrednost vrnjena iz obsega | Izhod |
---|---|---|
1. | Zavrženo | Pozdravljen, svet! |
2. | Zavrženo | Pozdravljen, svet! |
vhodna zanka za določene intervale z uporabo koraka
Če želite zanko, ki se v vsaki ponovitvi poveča za določeno vrednost, namesto obsega, morate uporabiti način koraka.
Primer 3: vhodna zanka z uporabo stride metode
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Ko zaženete program, bo rezultat:
1 3 5 7 9
V zgornjem programu stride
funkcija vrne zaporedje števil: 1, 3, 5, 7, 9.
Vrednost i je nastavljena na prvo številko zaporedja (1) in izvede se stavek za tiskanje znotraj zanke, ki v konzoli prikaže "1".
Po izvedbi stavka se vrednost i posodobi na drugo vrednost (3) in izjava za tiskanje se ponovno pokliče. Ta postopek se nadaljuje, dokler se ne dostopi do vseh elementov zaporedja.
Koraki za izvedbo zanke z uporabo korakaVrednost | Pogoj (vrednost <konec) | i (izhod) |
---|---|---|
1. | 1 <10 (resnično) | 1. |
1 + 2 = 3 | 3 <10 (resnično) | 3. |
1 + 2 * 2 = 5 | 5 <10 (resnično) | 5. |
1 + 3 * 2 = 7 | 7 <10 (resnično) | 7. |
1 + 4 * 2 = 9 | 9 <10 (resnično) | 9. |
1 + 5 * 2 = 11 | 11 <10 (napačno) | Ustavi se |
Kako dostopati do elementov zbirke z uporabo zanke for-in?
Recimo, da imate niz nizov, kot je prikazano spodaj. Če ne veste o matriki, si omislite matriko kot en sam vsebnik, ki lahko shrani več kot eno vrednost. Za podrobnejšo razlago glejte Swift Arrays.
naj 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).
vrednost je nastavljena na prvi znak niza in se preveri s pogojem where. Če se stanje vrne true
, se izvede blok znotraj zanke (stavek za tiskanje), ki v konzoli izpiše "I".
Po izvedbi stavka se vrednost posodobi na naslednji znak niza in ponovno preveri stanje. Če se stanje vrne false
, bloka ne izvede in vrednost se posodobi na naslednji znak.
Ta postopek se nadaljuje, dokler se ne dostopa do zadnjega znaka niza.
Filtrirajte z uporabo korakov za izvedbo zankePonavljanje | vrednost | vrednost! = “!” | Izhod |
---|---|---|---|
1. | jaz | prav | jaz |
2. | ♥ | prav | ♥ |
3. | S | prav | S |
4. | w | prav | w |
5. | jaz | prav | jaz |
6. | f | prav | f |
7. | t | prav | t |
8. | ! | napačno |