我想创建一个string包含*符号n时间的内容.我只看到这种方式:
val s = ""
val n = 100
for (j in 0 until n) {
s += "*"
}
Run Code Online (Sandbox Code Playgroud)
但它看起来很丑陋,而且时间复杂度为O(n ^ 2).Kotlin有没有办法在没有时间复杂度更高的循环的情况下做到这一点?
zsm*_*b13 14
内置CharSequence.repeat扩展以高效的方式完成此操作,请参阅此处的源代码.
val str: String = "*".repeat(100)
Run Code Online (Sandbox Code Playgroud)
当然,这仍然需要O(n)步骤来创建字符串.但是,使用这种内置的stdlib功能有其优点:它具有跨平台,易于阅读,并且如果有更高效的解决方案,可以随着时间的推移提高性能.无论如何,它内部的循环可能会被编译器或运行时优化.
您可以重载该*运算符以将其映射到现有的重复扩展:
public operator fun CharSequence.times(count: Int): String {
return repeat(count)
}
fun main() {
val s = "*" * 101
println(s)
println("Badger " * 12 + "Mushroom " * 2)
println(s)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |