gpt4 book ai didi

Kotlin 惰性切片数组

转载 作者:行者123 更新时间:2023-12-04 16:44:53 25 4
gpt4 key购买 nike

我需要向后迭代数组的一部分。我想“功能性地”这样做,因为它更容易理解,就像那样

for (b in buf.sliceArray(0 until bufLimit).reversedArray()) {}

但是 sliceArrayreversedArray 都不是惰性的。有懒惰的版本还是我应该退回到

for (bIdx in bufLimit - 1 downTo 0) {
val b = buf[bIdx]
}

哪个更困惑和冗长?

最佳答案

如果你使用列表而不是数组,那么你可以反转它然后转换为 Sequence:

val buf: List = listOf(1, 2, 3, 4, 5)
val bufLimit = 3

for (b in buf.asReversed().asSequence().drop(buf.size - bufLimit)) {
println(b)
}

带有as前缀的函数只包装对象而不复制,所以上面的代码不会复制buf的内容。

请注意,如果您使用 ArrayList,与 Array 相比,您不应失去任何性能。

但是这个解决方案确实涉及多个迭代器,所以它比你在问题中建议的索引代码效率低一些:

for (bIdx in bufLimit - 1 downTo 0) {
val b = buf[bIdx]
}

关于Kotlin 惰性切片数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425091/

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