是否有一个函数,我可以使用迭代数组,并有索引和元素,像Python的枚举?

for index, element in enumerate(list):
    ...

当前回答

从Swift 2开始,需要对集合调用enumerate函数,如下所示:

for (index, element) in list.enumerate() {
    print("Item \(index): \(element)")
}

其他回答

如果你出于某种原因想要一个更传统的查找循环,通过索引访问数组中的元素:

let xs = ["A", "B", "C", "D"]

for i in 0 ..< xs.count {
    print("\(i) - \(xs[i])")
}

输出:

0 - A
1 - B
2 - C
3 - D

我们调用枚举函数来实现这个。就像

    for (index, element) in array.enumerate() {
     index is indexposition of array
     element is element of array 
   }

从Swift 2开始,需要对集合调用enumerate函数,如下所示:

for (index, element) in list.enumerate() {
    print("Item \(index): \(element)")
}

基本枚举

for (index, element) in arrayOfValues.enumerate() {
// do something useful
}

或者用Swift 3…

for (index, element) in arrayOfValues.enumerated() {
// do something useful
}

枚举,过滤和映射

但是,我最常将enumerate与map或filter结合使用。例如,在一对数组上操作。

在这个数组中,我想过滤奇数或偶数索引元素,并将它们从整型转换为双精度。所以enumerate()得到索引和元素,然后filter检查索引,最后为了去掉结果元组,我将它映射到元素。

let evens = arrayOfValues.enumerate().filter({
                            (index: Int, element: Int) -> Bool in
                            return index % 2 == 0
                        }).map({ (_: Int, element: Int) -> Double in
                            return Double(element)
                        })
let odds = arrayOfValues.enumerate().filter({
                            (index: Int, element: Int) -> Bool in
                            return index % 2 != 0
                        }).map({ (_: Int, element: Int) -> Double in
                            return Double(element)
                        })

你可以简单地使用循环枚举来得到你想要的结果:

斯威夫特2:

for (index, element) in elements.enumerate() {
    print("\(index): \(element)")
}

Swift 3和4:

for (index, element) in elements.enumerated() {
    print("\(index): \(element)")
}

或者你可以简单地执行一个for循环来得到相同的结果:

for index in 0..<elements.count {
    let element = elements[index]
    print("\(index): \(element)")
}

希望能有所帮助。