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有多大都需要一个恒定的内存量。