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?