Swift中的循环迭代器
问题描述:
在Python中,有itertools.cycle
,它需要iterable
并生成一个迭代器,它可以从源重复生成内容。Swift中的循环迭代器
我想在Swift中复制这种行为。
一种复制这种行为将是标准库的repeatElement(_:count:)
候选人:做repeatElement(seq, count: 5).flatMap({$0})
创建的seq
五倍元素的数组,但是这不符合我的要求,因为它只是重复seq
的有限次数。此外,它会创建一个长度为5 * seq.length
的Array
,其中只有实际需要长度为seq
的缓存。
所以问题是:我如何创建一个无限的Sequence
通过重复源的元素Sequence
?该解决方案的空间成本不应超过O(n)
。 (A O(1)
不可能在斯威夫特保证,作为Sequence
makes no guarentee that it can be iterated multiple times。)
答
这有什么错手动执行一些数组访问支持的Sequence
模长度?小心一点,你的索引不需要溢出,只要你喜欢,你可以循环使用。
请注意,API文档警告更像是一个友好的提醒,即重用不是Sequence
接口合同的强制性部分。但是这并不排除你的特定实现可以在多个循环之间重复使用。