Swift中的循环迭代器

问题描述:

在Python中,有itertools.cycle,它需要iterable并生成一个迭代器,它可以从源重复生成内容。Swift中的循环迭代器

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

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

所以问题是:我如何创建一个无限的Sequence通过重复源的元素Sequence?该解决方案的空间成本不应超过O(n)。 (A O(1)不可能在斯威夫特保证,作为Sequencemakes no guarentee that it can be iterated multiple times。)

这有什么错手动执行一些数组访问支持的Sequence模长度?小心一点,你的索引不需要溢出,只要你喜欢,你可以循环使用。

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