swift for循环:索引,数组中的元素?
有没有一个函数可以用来遍历一个数组,并有索引和元素,就像python的枚举一样?
for index, element in enumerate(list):
...
是。 从Swift 3.0开始,如果需要每个元素的索引及其值,则可以使用enumerated()
方法遍历数组。 它返回由索引和数组中每个项目的值组成的一系列对。 例如:
for (index, element) in list.enumerated() {
print("Item (index): (element)")
}
在Swift 3.0之前和Swift 2.0之后,函数被调用为enumerate()
:
for (index, element) in list.enumerate() {
print("Item (index): (element)")
}
在Swift 2.0之前, enumerate
是一个全局函数。
for (index, element) in enumerate(list) {
println("Item (index): (element)")
}
Swift 3为Array
提供了一个名为enumerated()
的方法。 enumerated()
具有以下声明:
func enumerated() -> EnumeratedSequence<Array<Element>>
返回对(n,x)的序列,其中n表示从零开始的连续整数,x表示序列的元素。
在最简单的情况下,你可以使用enumerated()
和for循环。 例如:
let list = ["Car", "Bike", "Plane", "Boat"]
for (index, element) in list.enumerate() {
print(index, ":", element)
}
/*
prints:
0 : Car
1 : Bike
2 : Plane
3 : Boat
*/
但请注意,您不限于使用enumerated()
和for循环。 实际上,如果您打算将enumerated()
循环用于类似于以下代码的enumerated()
,那么您就错了:
let list = [Int](1...5)
var arrayOfTuples = [(Int, Int)]()
for (index, element) in list.enumerated() {
arrayOfTuples += [(index, element)]
}
print(arrayOfTuples) // prints [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
正确的做法是:
let list = [Int](1...5)
let arrayOfTuples = Array(list.enumerated())
print(arrayOfTuples) // prints [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
作为替代,您也可以使用enumerated()
和map
:
let list = [Int](1...5)
let arrayOfDictionaries = list.enumerated().map { (a, b) in return [a : b] }
print(arrayOfDictionaries) // prints [[0: 1], [1: 2], [2: 3], [3: 4], [4: 5]]
而且,虽然它有一些限制, forEach
可以很好地代替for循环:
let list = [Int](1...5)
list.reversed().enumerated().forEach { print($0, ":", $1) }
/*
prints:
0 : 5
1 : 4
2 : 3
3 : 2
4 : 1
*/
通过使用enumerated()
和makeIterator()
,你甚至可以在Array
上手动迭代。 例如:
import UIKit
class ViewController: UIViewController {
var generator = ["Car", "Bike", "Plane", "Boat"].enumerated().makeIterator()
// Link this IBAction to a UIButton in your storyboard
@IBAction func iterate(_ sender: UIButton) {
let tuple: (offset: Int, element: String)? = generator.next()
print(String(describing: tuple))
}
}
/*
Will print the following lines for 6 `touch up inside`:
Optional((0, "Car"))
Optional((1, "Bike"))
Optional((2, "Plane"))
Optional((3, "Boat"))
nil
nil
*/
从Swift 2开始,需要在集合上调用枚举函数,如下所示:
for (index, element) in list.enumerate() {
print("Item (index): (element)")
}
链接地址: http://www.djcxy.com/p/19267.html
上一篇: swift for loop: for index, element in array?
下一篇: How can I create a two dimensional array in JavaScript?