kotlin - 在 Kotlin 中读入和打印出二维数组的最快方法是什么?
问题描述
以下代码适用于读取 2d 数组并在 Kotlin 中将其打印出来,但是我想用较大的数据集从字符串交换到 int 列表会相当慢,那么有没有更快的方法呢?
fun main() {
var rowAndColumn = readLine()!!.split(" ")
var rows = rowAndColumn[0].toInt()
var columns = rowAndColumn[1].toInt()
val board = Array(rows) { IntArray(columns).toMutableList() }
for (i in 0 until rows) {
var stringColumn = readLine()!!.split("").toMutableList()
stringColumn.removeAll(listOf(""))
var column = stringColumn.map {it.toInt()}.toMutableList()
board[i] = column
}
for(i in 0 until rows) {
println(board[i].toString())
}
}
解决方案
我测量这比你的方法快 4-5 倍。它迭代字符而不是将每一行拆分为每个字符的字符串。
var rowAndColumn = readLine()!!.split(" ")
var rows = rowAndColumn[0].toInt()
var columns = rowAndColumn[1].toInt()
val board = arrayOfNulls<IntArray?>(rows)
for (row in 0 until rows) {
board[row] = readLine()!!
.asIterable()
.mapNotNull {
val i = it.toInt() - '0'.toInt()
if (i in 0..1) i else null
}
.toIntArray()
}
board.requireNoNulls()
如果您不介意以 aArray<List<Int>>
而不是 a结束Array<IntArray>
,您可以在第 4 行将其更改,并取消对.toIntArray()
略微 (~5%) 改进的要求。
警告...我是从文本文件中读取的,而不是控制台输入,因此文件访问可能会影响比较。直觉告诉我,如果删除文件读取时间,这可能会更快。
推荐阅读
- php - 为什么我收到 PHP Invalid JWT provided 错误?
- reactjs - 如何通过单击菜单按钮不更改地址。只交换屏幕上的一个组件?
- javascript - NodeJS 和 Retrofit 的多部分数据问题
- python - Python - 尝试除外
- azure - 您能否将应用服务日志或应用程序洞察日志摄取到 azure 事件中心
- c# - ObjectListView 在 SetObjects() 上抛出 InvalidCastException
- python - Teradataml:删除由 Teradata MLE 函数创建的所有临时表
- mysql - 如何确保单元测试原则正试图加载到与 dev 相同的数据库?
- azure - ACR 的 Azure 模块
- bash - 如何在bash中使用变量替换来回显字符串?