首页 > 解决方案 > 在 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())
    }
}

标签: kotlin

解决方案


我测量这比你的方法快 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%) 改进的要求。

警告...我是从文本文件中读取的,而不是控制台输入,因此文件访问可能会影响比较。直觉告诉我,如果删除文件读取时间,这可能会更快。


推荐阅读