在Swift

时间:2016-07-27 21:08:02

标签: swift iterator cycle swift3

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

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

复制此行为的候选人将是标准库repeatElement(_:count:):执行repeatElement(seq, count: 5).flatMap({$0})创建seq元素的数组五次,但这不符合我的要求因为它只重复seq有限次数。此外,它会创建Array长度5 * seq.length,其中只需要seq长度的缓存。

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

1 个答案:

答案 0 :(得分:0)

手动实现某个数组访问支持的Sequence模数的长度有什么问题?有点小心,你的索引永远不会溢出,你可以根据自己的喜好循环。

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