进行编码挑战时的常见模式是读取多行输入。假设您事先不知道有多少行,您想要读取直到 EOF(readLine 返回 null)。
另外作为前言,我不想依赖 java.utils.* 因为我是用 KotlinNative 编码的,所以没有 Scanner。
我想做一些类似的事情
val lines = arrayListOf<String>()
for (var line = readLine(); line != null; line = readLine()) {
lines.add(line)
}
但这显然不是有效的 Kotlin。我能想到的最干净的是:
while (true) {
val line = readLine()
if (line == null) break
lines.add(line)
}
这可行,但看起来不太惯用。有没有更好的方法将所有行读入数组,而不使用 while/break 循环?
generateSequence https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/generate-sequence.html有一个很好的属性,如果内部生成器返回 null 并且只接受一次迭代,它将完成,因此以下代码可能是有效的:
val input = generateSequence(::readLine)
val lines = input.toList()
然后喜欢s1m0nw1 的回答 https://stackoverflow.com/a/53575400/1452094您可以使用任何可用的Sequence<String>
根据您的解决方案的需要对其进行改进的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)