В тази статия ще научите за цикъла for-in, неговите случаи на употреба и варианти.
Циклите за включване се използват за изпълнение на набор от задачи за определен брой пъти. Тези цикли итерират над всякакви последователности, като елементи в масив, диапазон или символи в низ.
Също така използваме цикъл for-in, за да правим някои повтарящи се процеси за определен период от време.
Защо се нуждаем от цикъл за включване?
Представете си, че някой ви е казал да напишете програма, която извежда Hello, World! на екрана. Вашето решение ще бъде:
print ("Здравей, Свят!")
Ами ако те се размислиха и ти казаха да напишеш програма, която да извежда Hello, World! на екрана пет пъти … Без знанието за цикъл, вашето решение може да бъде:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Хм. Изглежда отнема време да се пише подобен код пет пъти, за да се извърши една и съща работа. Ако е така, какво бихте направили, ако някой ви помоли да напишете програма, която извежда Hello, World! на екрана сто или дори милион пъти?
Едно наивно решение е да напишете print
изявлението за даден брой пъти. Звучи налудничаво, нали? Но има по-добро решение за това с използването на for-in
цикли с няколко реда код като:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Не се притеснявайте за синтаксиса, ще го разгледаме по-долу.
Синтаксис за цикъл за включване
Можете да създадете for in in loop в Swift като:
за в ()
Горният цикъл се повтаря в диапазон и можем да получим достъп до всеки елемент, върнат от диапазона в променлива. Ако не знаете за обхвата, можете да проверите статията: Swift Ranges.
Как работи?
- Последователността, която се итерира, е a.
- Задава се на първо число в диапазона и се изпълняват операторите вътре в цикъла.
- След като операторът бъде изпълнен, той се актуализира, за да съдържа втората стойност в и изразът се изпълнява отново.
- Този процес продължава, докато се достигне края на диапазона и цикълът спре.
Пример 1: Как цикълът за включване работи в Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Когато стартирате програмата, изходът ще бъде:
Здравей свят!. Стойността е 1 Здравей, свят! Стойността е 2 Hello world !. Стойността е 3
В горната програма последователността, която се итерира, е от 1 до 3.
Стойността на i се задава на първото число в диапазона (1) и се актуализира до следващия номер на диапазона на всяка итерация. Този процес продължава до достигане на края на диапазона (3).
Стъпки за изпълнение на цикъл за включванеПовторение | Стойност, върната от диапазон (i) | Изход |
---|---|---|
1 | 1 | Здравей свят!. Стойността е 1 |
2 | 2 | Здравей свят!. Стойността е 2 |
3 | 3 | Здравей свят!. Стойността е 3 |
Отхвърляне на стойността на диапазона в цикъл за включване
Ако не използвате стойността на диапазона в цикъла, можете да отхвърлите използването на _
(подчертаване) в Swift като:
за _ в ()
Пример 2: Отхвърляне на стойността на диапазона във входния цикъл
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Когато стартирате програмата, изходът ще бъде:
Здравей свят! Здравей свят!
В горната програма последователността, която се итерира, е в диапазон от 1 до 2 поради използването на оператор на полуотворения диапазон (… <), който включва долната граница (1), но не и горната граница (3).
_
пренебрегва стойността от диапазона (1) и инструкцията за печат се изпълнява. Отпечатването се извиква отново за следваща итерация и процесът приключва, защото 2 е последната стойност в диапазона.
Повторение | Стойност, върната от диапазон | Изход |
---|---|---|
1 | Изхвърлено | Здравей свят! |
2 | Изхвърлено | Здравей свят! |
контур за включване за фиксирани интервали, използвайки стъпка
Ако искате цикъл, който се увеличава с някаква фиксирана стойност във всяка итерация, вместо обхват, трябва да използвате метод на крачка.
Пример 3: включен цикъл, използващ метод на крачка
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Когато стартирате програмата, изходът ще бъде:
1 3 5 7 9
В горната програма stride
функцията връща последователността от числа: 1, 3, 5, 7, 9.
Стойността на i се задава на първото число на последователността (1) и се изпълнява инструкцията за печат вътре в цикъла, която извежда "1" в конзолата.
След като операторът се изпълни, стойността на i се актуализира до друга стойност (3) и инструкцията за печат се извиква отново. Този процес продължава, докато се достигне до всички елементи на последователността.
Стъпки за изпълнение на цикъл за използване с крачкаСтойност | Състояние (Стойност <Край) | i (изход) |
---|---|---|
1 | 1 <10 (вярно) | 1 |
1 + 2 = 3 | 3 <10 (вярно) | 3 |
1 + 2 * 2 = 5 | 5 <10 (вярно) | 5 |
1 + 3 * 2 = 7 | 7 <10 (вярно) | 7 |
1 + 4 * 2 = 9 | 9 <10 (вярно) | 9 |
1 + 5 * 2 = 11 | 11 <10 (невярно) | Спира |
Как да осъществите достъп до елементи на колекция, използвайки цикъл for-in?
Да предположим, че имате масив от низове, както е показано по-долу. Ако не знаете за масива, помислете за масива като за един контейнер, който може да съхранява повече от една стойност. За по-подробно обяснение вижте Swift Arrays.
let 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).
value се задава на първия символ на низа и се проверява с условието where. Ако условието се върне true
, се изпълнява блокът в цикъла (инструкция за печат), който извежда „I“ в конзолата.
След като операторът се изпълни, стойността се актуализира до следващия символ на низа и отново се проверява условието. Ако условието се върне false
, то не изпълнява блока и стойността се актуализира до следващия символ.
Този процес продължава, докато се осъществи достъп до последния символ на низа.
Филтрирайте с помощта на стъпки за изпълнение на цикълПовторение | стойност | стойност! = “!” | Изход |
---|---|---|---|
1 | Аз | вярно | Аз |
2 | ♥ | вярно | ♥ |
3 | С | вярно | С |
4 | w | вярно | w |
5 | i | вярно | i |
6 | е | вярно | е |
7 | т | вярно | т |
8 | ! | невярно |