enumerated()常数时间O(1)如何?

Dre*_*rew 2 arrays big-o ios swift

我在查看enumerated()有关该Array类型的文档时,发现它说:

复杂度:O(1)

https://developer.apple.com/documentation/swift/array/1687832-枚举

这似乎没有意义,因为遍历数组将是线性时间O(n)--因为数组的长度未知。enumerated()将必须遍历数组才能返回EnumeratedSequence。这个函数如何保持时间复杂度?

iel*_*ani 5

创建一个EnumeratedSequence初始化其迭代器。后者分两个步骤完成:

  • 有一个指向其基础集合或序列的指针enumerated()
  • 初始化内部变量_count0

完成这两个步骤所需的时间不会随集合/序列中元素的数量而变化。

遍历an的元素EnumeratedSequence等效于调用.next()的迭代器EnumeratedSequencelet result = (offset: _count, element: b)只要基集合/序列中有元素(因此产生了guard语句),它就会(按需)创建一个元组,并递增_count += 1

概括一下:创建一个枚举序列是O(1),但是遍历所有元素当然是O(n)。