我在查看有关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)。

    10-06 00:09