Đã cập nhật cho Swift 3
Câu trả lời dưới đây là một bản tóm tắt của các tùy chọn có sẵn. Chọn một trong những phù hợp nhất với nhu cầu của bạn.
reversed
: số trong một phạm vi
Ở đằng trước
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Phía sau
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: các yếu tố trong SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Ở đằng trước
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
Phía sau
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: các phần tử có chỉ mục
Đôi khi một chỉ số là cần thiết khi lặp qua một bộ sưu tập. Cho rằng bạn có thể sử dụng enumerate()
, trả về một tuple. Phần tử đầu tiên của bộ dữ liệu là chỉ mục và phần tử thứ hai là đối tượng.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Ở đằng trước
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
Phía sau
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Lưu ý rằng như Ben Lachman đã lưu ý trong câu trả lời của mình , có lẽ bạn muốn làm .enumerated().reversed()
hơn là .reversed().enumerated()
(điều này sẽ làm cho số chỉ số tăng lên).
sải chân: số
Stride là cách để lặp mà không cần sử dụng một phạm vi. Có hai hình thức. Các nhận xét ở cuối mã cho biết phiên bản phạm vi sẽ là gì (giả sử kích thước tăng là 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Ở đằng trước
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Phía sau
Thay đổi kích thước gia tăng để -1
cho phép bạn đi lùi.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Lưu ý to
và through
sự khác biệt.
bước tiến: các yếu tố của SequenceType
Chuyển tiếp theo gia số 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Tôi đang sử dụng 2
trong ví dụ này chỉ để thể hiện một khả năng khác.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
Phía sau
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Ghi chú