Kotlin 序列

问题描述 投票:0回答:1

如何实现这个fn:

fun moreAndMore(seq: 序列): 序列 = TODO()

它接受一个输入序列,并首先从中获取第一个元素,然后是前 2 个元素,然后是前 3 个元素 等等

如果输入序列是有限的且长度为 n,则生成的序列必须具有 1 + 2 + 3 + .... + n 个元素

Empty 应该变成empty,singleton 变成singleton。

生成 1, 2, 3 的序列应转换为生成 1, 1, 2, 1, 2, 3 的序列

无限的序列应该变成无限的序列,每次都比原来的更进一步

如果输入序列是从迭代器(Iterator.asSequence)生成的 - 第二遍的尝试将中断 - 这是正常的。但空选项和单元素选项应该可以正常工作而不会丢失。

我们不使用可变性。好吧,除了缝在 Sequence 实现中的那个之外。

kotlin iterator sequence challenge-response
1个回答
0
投票

以下内容应该适合您。

fun <T> moreAndMore(sequence: Sequence<T>): Sequence<T> = sequence {
    val iterator = sequence.iterator()
    val items = mutableListOf<T>()
    
    while (iterator.hasNext()) {
        items += iterator.next()
        yieldAll(items)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.