我在查看有关enumerated()
类型的Array
的文档,发现它说:
https://developer.apple.com/documentation/swift/array/1687832-enumerated
这似乎没有意义,因为遍历数组将是线性时间-O(n)
-因为数组的长度未知。 enumerated()
必须遍历数组才能返回EnumeratedSequence
。这个函数如何保持恒定的时间复杂度?
最佳答案
创建EnumeratedSequence
归结为initializing及其迭代器。后者分两个步骤完成:
enumerated()
的基本集合或序列的指针。 _count
初始化为0
完成这两个步骤所需的时间不会随集合/序列中元素的数量而变化。
循环遍历
EnumeratedSequence
的元素等效于在.next()
的迭代器上调用 EnumeratedSequence
。只要基本集合/序列中有元素(因此需要保护声明),它就会(按需)创建一个元组let result = (offset: _count, element: b)
,并增加_count += 1
。概括一下:创建一个枚举序列是O(1),但是遍历所有元素当然是O(n)。