gpt4 book ai didi

collections - 如何在 Kotlin 中无限重复序列?

转载 作者:IT老高 更新时间:2023-10-28 13:37:16 24 4
gpt4 key购买 nike

我想无限重复T Sequence<T> 中的元素.使用 kotlin.collections.asSequence 无法做到这一点.例如:

val intArray = intArrayOf(1, 2, 3)
val finiteIntSequence = intArray.asSequence()
val many = 10
finiteIntSequence.take(many).forEach(::print)
// 123

这不是我想要的。我期待某种 kotlin.collections.repeat函数存在,但不存在,所以我自己实现了一个(例如对于这个 IntArray ):

var i = 0
val infiniteIntSequence = generateSequence { intArray[i++ % intArray.size] }
infiniteIntSequence.take(many).forEach(::print)
// 1231231231

这是非常必要的,所以我觉得必须有一种更实用、更简洁的方法来做到这一点。如果存在,Kotlin 将集合/数组重复 a(n)(in) 有限次的标准方法是什么?

最佳答案

更新:协程从 Kotlin 1.3 开始不再是实验性的!尽可能多地使用它们:)


如果您允许使用 coroutines您可以使用 sequence 以非常干净的方式执行此操作:

an infinite amount of times

fun <T> Sequence<T>.repeat() = sequence { while (true) yieldAll(this@repeat) }

注意 qualified this expression 的使用this@repeat - 简单地使用 this 将引用 lambda 的接收器,一个 SequenceScope .

那你就可以了

val intArray = intArrayOf(1, 2, 3)
val finiteIntSequence = intArray.asSequence()
val infiniteIntSequence = finiteIntSequence.repeat()

println(infiniteIntSequence.take(10).toList())
// ^ [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]

a finite amount of times

fun <T> Sequence<T>.repeat(n: Int) = sequence { repeat(n) { yieldAll(this@repeat) } }

关于collections - 如何在 Kotlin 中无限重复序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48007311/

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