Trong bài viết này, bạn sẽ tìm hiểu về vòng lặp for-in, các trường hợp sử dụng và các biến thể của nó.
Vòng lặp for-in được sử dụng để chạy một tập hợp các tác vụ trong một số lần nhất định. Các vòng lặp này lặp qua bất kỳ chuỗi nào chẳng hạn như các mục trong một mảng, dải ô hoặc các ký tự trong một chuỗi.
Chúng tôi cũng sử dụng vòng lặp for-in để thực hiện một số quy trình lặp đi lặp lại trong một khoảng thời gian cố định.
Tại sao chúng ta cần vòng lặp for-in?
Hãy tưởng tượng ai đó yêu cầu bạn viết một chương trình xuất ra Hello, World! trong màn hình. Giải pháp của bạn sẽ là:
print ("Xin chào, Thế giới!")
Điều gì sẽ xảy ra nếu, họ đổi ý và bảo bạn viết một chương trình xuất ra Hello, World! trên màn hình năm lần… Nếu không có kiến thức về vòng lặp, giải pháp của bạn có thể là:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hừ! Có vẻ tốn thời gian để viết mã tương tự trong năm lần để hoàn thành cùng một công việc. Nếu vậy, bạn sẽ làm gì nếu ai đó yêu cầu bạn viết một chương trình xuất ra Hello, World! trong màn hình hàng trăm hoặc thậm chí hàng triệu lần?
Một giải pháp đơn giản là viết print
câu lệnh cho một số lần nhất định. Nghe có vẻ điên rồ, phải không? Nhưng có một giải pháp tốt hơn cho điều này với việc sử dụng các for-in
vòng lặp với vài dòng mã như:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Đừng lo lắng về cú pháp, chúng ta sẽ khám phá nó dưới đây.
Cú pháp vòng lặp For-in
Bạn có thể tạo vòng lặp for trong Swift như sau:
tại ( )
Vòng lặp trên lặp lại trên một phạm vi và chúng ta có thể truy cập từng phần tử được trả về từ phạm vi trong biến. Nếu bạn không biết về phạm vi, bạn có thể xem bài viết: Swift Ranges.
Làm thế nào nó hoạt động?
- Trình tự được lặp lại là a.
- Giá trị được đặt thành số đầu tiên trong phạm vi và các câu lệnh bên trong vòng lặp được thực thi.
- Sau khi câu lệnh được thực thi, câu lệnh được cập nhật để chứa giá trị thứ hai trong và câu lệnh được thực thi lại.
- Quá trình này tiếp tục cho đến khi đạt đến cuối phạm vi và dừng vòng lặp.
Ví dụ 1: Vòng lặp for-in hoạt động như thế nào trong Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Khi bạn chạy chương trình, đầu ra sẽ là:
Chào thế giới!. Giá trị là 1 Xin chào thế giới !. Giá trị là 2 Xin chào thế giới !. Giá trị là 3
Trong chương trình trên, trình tự được lặp lại là một phạm vi từ 1 đến 3.
Giá trị của i được đặt thành số đầu tiên trong phạm vi (1) và được cập nhật thành số tiếp theo của phạm vi trên mỗi lần lặp. Quá trình này tiếp tục cho đến khi đạt đến cuối phạm vi (3).
Các bước thực thi vòng lặp for-inLặp lại | Giá trị được trả về từ phạm vi (i) | Đầu ra |
---|---|---|
1 | 1 | Chào thế giới!. Giá trị là 1 |
2 | 2 | Chào thế giới!. Giá trị là 2 |
3 | 3 | Chào thế giới!. Giá trị là 3 |
Loại bỏ giá trị phạm vi trong vòng lặp bổ sung
Nếu bạn không sử dụng giá trị phạm vi bên trong vòng lặp, bạn có thể hủy sử dụng _
(dấu gạch dưới) trong Swift như:
tại ( )
Ví dụ 2: Loại bỏ giá trị phạm vi trong vòng lặp bổ sung
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Khi bạn chạy chương trình, đầu ra sẽ là:
Chào thế giới! Chào thế giới!
Trong chương trình trên, dãy được lặp lại là một phạm vi từ 1 đến 2 do sử dụng toán tử nửa mở (… <) bao gồm giới hạn dưới (1) nhưng không bao gồm giới hạn trên (3).
_
bỏ qua giá trị từ phạm vi (1) và câu lệnh in được thực hiện. Câu lệnh print được gọi lại cho lần lặp tiếp theo và quá trình kết thúc vì 2 là giá trị cuối cùng trong phạm vi.
Lặp lại | Giá trị được trả về từ phạm vi | Đầu ra |
---|---|---|
1 | Đã hủy | Chào thế giới! |
2 | Đã hủy | Chào thế giới! |
vòng lặp for-in cho các khoảng thời gian cố định bằng cách sử dụng sải chân
Nếu bạn muốn một vòng lặp tăng lên một số giá trị cố định trong mỗi lần lặp, thay vì phạm vi, bạn phải sử dụng phương pháp bước.
Ví dụ 3: vòng lặp for-in sử dụng phương pháp bước
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Khi bạn chạy chương trình, đầu ra sẽ là:
1 3 5 7 9
Trong chương trình trên, stride
hàm trả về dãy số: 1, 3, 5, 7, 9.
Giá trị của i được đặt thành số đầu tiên của dãy (1) và câu lệnh in bên trong vòng lặp được thực thi để xuất ra "1" trong bảng điều khiển.
Sau khi câu lệnh được thực thi, giá trị của i được cập nhật thành giá trị khác (3) và câu lệnh in được gọi lại. Quá trình này tiếp tục cho đến khi tất cả các phần tử của dãy được truy cập.
Các bước thực hiện vòng lặp for-trong bằng cách sử dụng bướcGiá trị | Điều kiện (Giá trị <Kết thúc) | i (Đầu ra) |
---|---|---|
1 | 1 <10 (đúng) | 1 |
1 + 2 = 3 | 3 <10 (đúng) | 3 |
1 + 2 * 2 = 5 | 5 <10 (đúng) | 5 |
1 + 3 * 2 = 7 | 7 <10 (đúng) | 7 |
1 + 4 * 2 = 9 | 9 <10 (đúng) | 9 |
1 + 5 * 2 = 11 | 11 <10 (sai) | Điểm dừng |
Làm cách nào để truy cập các phần tử của một tập hợp bằng vòng lặp for-in?
Giả sử bạn có một mảng các chuỗi như bên dưới. Nếu bạn không biết về mảng, hãy nghĩ về mảng như một vùng chứa duy nhất có thể lưu trữ nhiều hơn một giá trị. Để biết giải thích chi tiết hơn, hãy xem Mảng Swift.
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).
giá trị được đặt thành ký tự đầu tiên của chuỗi và được kiểm tra với điều kiện where. Nếu điều kiện trả về true
, khối bên trong vòng lặp (câu lệnh in) được thực thi và xuất ra "I" trong bảng điều khiển.
Sau khi câu lệnh được thực thi, giá trị được cập nhật thành ký tự tiếp theo của chuỗi và điều kiện một lần nữa được kiểm tra. Nếu điều kiện trả về false
, nó không thực thi khối và giá trị được cập nhật thành ký tự tiếp theo.
Quá trình này tiếp tục cho đến khi ký tự cuối cùng của chuỗi được truy cập.
Lọc bằng cách sử dụng các bước thực thi vòng lặp bổ sungLặp lại | giá trị | value! = “!” | Đầu ra |
---|---|---|---|
1 | Tôi | thật | Tôi |
2 | ♥ | thật | ♥ |
3 | S | thật | S |
4 | w | thật | w |
5 | Tôi | thật | Tôi |
6 | f | thật | f |
7 | t | thật | t |
số 8 | ! | sai |