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

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

当前回答

基本枚举

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)
                        })

其他回答

从Swift 3开始,的确如此

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

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

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

Xcode 8和Swift 3: 可以使用temparray . enumeration()枚举数组。

例子:

var someStrs = [String]()

someStrs.append("Apple")  
someStrs.append("Amazon")  
someStrs += ["Google"]    


for (index, item) in someStrs.enumerated()  
{  
        print("Value at index = \(index) is \(item)").  
}

控制台:

Value at index = 0 is Apple
Value at index = 1 is Amazon
Value at index = 2 is Google

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

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

斯威夫特5. x:

我个人更喜欢使用forEach方法:

list.enumerated().forEach { (index, element) in
    ...
}

你也可以使用简短的版本:

list.enumerated().forEach { print("index: \($0.0), value: \($0.1)") }