2016-07-27 83 views
0

在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。)

回答

0

這有什麼錯手動執行一些數組訪問支持的Sequence模長度?小心一點,你的索引不需要溢出,只要你喜歡,你可以循環使用。

請注意,API文檔警告更像是一個友好的提醒,即重用不是Sequence接口合同的強制性部分。但是這並不排除你的特定實現可以在多個循環之間重複使用。