Kotlin单行实现控制台读取整数转Array<Int>能否更精简?
在竞赛编程场景下,确实可以把这段Kotlin代码精简不少!咱们一步步来优化:
首先看你原来的代码:
val na: Array<Int> = readLine()!!.split(' ').map{it.toInt()}.toTypedArray()
可以通过这几个点来精简:
- 去掉显式类型声明:Kotlin的类型推断足够聪明,能自动识别右边表达式返回的是
Array<Int>,所以可以删掉: Array<Int>。 - 用
readln()替代readLine()!!:Kotlin 1.6+新增了readln()函数,它直接返回非空的字符串(输入为空时会抛出异常,这在竞赛场景下完全没问题,因为输入都是符合要求的),省去了烦人的非空断言!!。 - 替换lambda为方法引用:
map{it.toInt()}可以简化成map(String::toInt),字符数更少,代码更简洁。 - 简化
split参数:无参数的split()会默认分割所有空白字符(包括多个空格、制表符等),比指定' '更灵活,还能适配竞赛中常见的多空格分隔输入,同时代码更短。
优化后的最精简版本(针对Array<Int>):
val na = readln().split().map(String::toInt).toTypedArray()
如果竞赛中允许使用List<Int>而非Array<Int>(大部分场景下List完全够用,比如遍历、随机访问等),还能再省掉toTypedArray(),变成:
val na = readln().split().map(String::toInt)
虽然还是比Python的一行代码长一点,但这已经是Kotlin静态类型特性下能做到的最精简写法了——毕竟Kotlin需要明确完成类型转换和集合类型的转换,而Python是动态类型语言,语法上天生更简洁~
内容的提问来源于stack exchange,提问作者Pitos
相关产品推荐
相关产品推荐

