Kotlin有没有复制功能?
replicate(n:Int,x:T):List<T>
是一个长度为n的列表,其中x是每个元素的值。
我写了一个可变的版本复制如下:
fun <T> mutableReplicate(n:Int, x:T) : MutableList<T>{ val xs = mutableListOf<T>() for (i in 1..n){ xs.add(x) } return xs }
在Kotlin中是否有任何bulid-in不可变的复制函数?
如何在Kotlin中自己写一个不可变的复制函数?
您可以使用List instantiation functions
。 它们接受从索引到所需元素的函数,但是也可以使用它们来创建一个常量值列表。
fun <T> replicate(n:Int,x:T):List<T> { return List(n) { x } }
如果你需要一个只读列表,你可以通过以下方式实现replicate
:
fun <T> replicate(n: Int, x: T): List<T> = object : AbstractList<T>() { override val size: Int = n override fun get(index: Int): T = if (index in 0..lastIndex) x else throw IndexOutOfBoundsException("$n") }
它有一个优点,就是无论n
有多大都需要一个恒定的内存量。