gpt4 book ai didi

kotlin - 如何从Kotlin序列中取出不同的 block ?

转载 作者:行者123 更新时间:2023-12-02 13:05:37 26 4
gpt4 key购买 nike

如果我有Kotlin序列,则每次调用take(n)都会重新启动序列。

val items = generateSequence(0) {
if (it > 9) null else it + 1
}

@Test fun `take doesn't remember position`() {
assertEquals(listOf(0, 1), items.take(2).toList())
assertEquals(listOf(0, 1, 2), items.take(3).toList())
}

有没有一种简单的方式写说 another(n)这样
@Test fun `another does remember position`() {
assertEquals(listOf(0, 1), items.another(2).toList())
assertEquals(listOf(2, 3, 4), items.another(3).toList())
}

我想我必须拥有不是 Sequence的东西才能保持状态,所以也许我实际上要的是对 fun Iterator<T>.another(count: Int): List<T>的一个很好的定义

最佳答案

Sequence不会记住其位置,但是其iterator会记住:

val iterator : Iterator<Int> = items.iterator()

现在,您需要的只是 take(n)之类的东西,但对于 Iterator<T>:
public fun <T> Iterator<T>.another(n: Int): List<T> {
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
var count = 0
val list = ArrayList<T>(n)
for (item in this) {
list.add(item)
if (++count == n)
break
}
return list
}

关于kotlin - 如何从Kotlin序列中取出不同的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com