【问题标题】:Cycle iterator in Swift [duplicate]Swift中的循环迭代器[重复]
【发布时间】:2016-07-28 05:18:24
【问题描述】:

在 Python 中,有 itertools.cycle,它接受 iterable 并创建一个可迭代的迭代器,从源代码中重复生成内容。

我想在 Swift 中复制这种行为。

复制此行为的候选对象是标准库的repeatElement(_:count:):执行repeatElement(seq, count: 5).flatMap({$0}) 会创建一个包含seq 元素的数组五次,但这不符合我的要求,因为它只会重复seq a有限的次数。此外,它还创建了一个长度为5 * seq.lengthArray,其中实际上只需要一个长度为seq 的缓存。

所以问题是:如何通过重复源Sequence 的元素来创建无限Sequence?该解决方案的空间成本不应超过O(n)。 (O(1) 在 Swift 中是不可能保证的,就像 Sequence makes no guarentee that it can be iterated multiple times。)

【问题讨论】:

  • FYI 看看这个实现:stackoverflow.com/a/46210298/3141234 它隐含依赖于可重用的包装序列,但您可以简单地将任何一次性序列包装到一个数组中,然后将其传递给

标签: swift iterator cycle swift3


【解决方案1】:

手动实现Sequence 有什么问题,该Sequence 由一些数组访问支持,对其长度取模?稍加注意,您的索引永远不会溢出,您可以随意循环。

请注意,API 文档警告读起来更像是一个友好的提醒,即重用不是Sequence 接口合同的强制性部分。但这并不排除您的特定实现可在多个循环之间重用。

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2011-11-13
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多