【发布时间】:2016-07-28 05:18:24
【问题描述】:
在 Python 中,有 itertools.cycle,它接受 iterable 并创建一个可迭代的迭代器,从源代码中重复生成内容。
我想在 Swift 中复制这种行为。
复制此行为的候选对象是标准库的repeatElement(_:count:):执行repeatElement(seq, count: 5).flatMap({$0}) 会创建一个包含seq 元素的数组五次,但这不符合我的要求,因为它只会重复seq a有限的次数。此外,它还创建了一个长度为5 * seq.length 的Array,其中实际上只需要一个长度为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