Ehs*_*Kia 2 kotlin kotlin-native
进行编码挑战时的常见模式是读取多行输入。假设您事先不知道多少行,那么您要读取直到EOF(readLine返回null)。
另外,作为序言,我不想依赖java.utils。*,因为我使用KotlinNative进行编码,所以没有Scanner。
我想做些类似的事情
val lines = arrayListOf<String>()
for (var line = readLine(); line != null; line = readLine()) {
lines.add(line)
}
Run Code Online (Sandbox Code Playgroud)
但这显然不是有效的Kotlin。我能想到的最干净的是:
while (true) {
val line = readLine()
if (line == null) break
lines.add(line)
}
Run Code Online (Sandbox Code Playgroud)
这行得通,但似乎不是很惯用。有没有更好的方法可以将所有行读入数组,而无需使用while / break循环?
我猜你正在谈论从System.in(stdin)这里读取。您可以使用序列来实现这一点:
val lines = generateSequence(readLine()) {
readLine()
}
lines.take(5).forEach { println("read: $it") }
Run Code Online (Sandbox Code Playgroud)
我们从第一个readLine(序列的种子)开始序列,然后读取下一行,直到null遇到。该序列可能是无限的,因此我们仅采用示例中的前五个输入。阅读Sequence 此处了解详细信息。
generateSequence 具有很好的属性,如果内部生成器返回null并仅接受一次迭代,它将完成,因此以下代码可能有效:
val input = generateSequence(::readLine)
val lines = input.toList()
Run Code Online (Sandbox Code Playgroud)
然后,像s1m0nw1的答案一样,您可以使用任何可用的Sequence<String>方法来根据您的解决方案进行优化。
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |