在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
。)
答案 0 :(得分:0)
手动实现某个数组访问支持的Sequence
模数的长度有什么问题?有点小心,你的索引永远不会溢出,你可以根据自己的喜好循环。
请注意,API文档警告更像是一个友好的提示,即重用不是Sequence
接口合同的强制部分。但是,这并不排除您的特定实现可以在多个循环之间重复使用。