Enumerated используется для перебора коллекции вместе с доступом к позиции. Он возвращает последовательность Pairs
, где первым элементом в Pair
является index
, а вторым элементом является сам element
коллекции.
Перечисление полезно, когда мы хотим получить доступ к позиции вместе с любой итерацией, фильтрацией или даже сопоставлением объектов коллекции.
Давайте сначала посмотрим на его определение.
/* Returns a sequence of pairs (*n*, *x*), where *n* represents a consecutive integer starting at zero and *x* represents an element of the sequence. */ @inlinable public func enumerated() -> EnumeratedSequence<Array<Element>>
Перечисленный лучший вариант использования - с массивом.
let array = [1, 2, 3, 4, 5] for (index, item) in array.enumerated() { print("Item at \(index) is \(item)") }
Его также можно использовать с set
и map
, но порядок вставки не гарантируется как в set
, так и в map
.
let set = [1, 2, 3, 4, 5] for (index, item) in set.enumerated() { print("Item at \(index) is \(item)") } let map = [1: "One", 2: "Two", 3: "Three"] for (index, item) in map.enumerated() { print("Item at \(index) is key: \(item.key) value: \(item.value)") }
Перечисление также можно использовать для перебора строки с последовательностью пар индекса и соответствующего символа по этому индексу.
for (index, item) in "Swift".enumerated() { print("Item at \(index) is \(item)") } //this will print Item at 0 is S Item at 1 is w Item at 2 is i Item at 3 is f Item at 4 is t
Нет необходимости сначала преобразовывать строку в массив символов, а затем перебирать ее. Функция Enumerated позаботится об этом.