如何压缩这些循环?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何压缩这些循环?相关的知识,希望对你有一定的参考价值。

我写了100多行代码,我知道一定有办法用更少的代码来完成这个任务。我想检查双数组中的值是否等于".",然后用用户输入的 "X "或 "O "代替。从最底层开始,就像他们是连接4游戏中的棋子一样。我已经为每一列写了一个循环来搜索行。我还没有找到一种不改变该列中每个". "的方法。这是一个用户的一列。

         var gameBoard = Array(8){ Array(8){"."} }

         fun checkOneX( ): Array<Array<String>> {

        when {
            gameBoard[7][0] == "." -> {
                gameBoard[7][0] = "X"
            }
            gameBoard[6][0] == "." -> {
                gameBoard[6][0] = "X"
            }
            gameBoard[5][0] == "." -> {
                gameBoard[5][0] = "X"
            }
            gameBoard[4][0] == "." -> {
                gameBoard[4][0] = "X"
            }
            gameBoard[3][0] == "." -> {
                gameBoard[3][0] = "X"
            }
            gameBoard[2][0] == "." -> {
                gameBoard[2][0] = "X"
            }
            gameBoard[1][0] == "." -> {
                gameBoard[1][0] = "X"
            }
            gameBoard[0][0] == "." -> {
                gameBoard[0][0] = "X"
            }
            else -> {
                println("There are no more spaces in this column")
            } 
答案

这可以是一个简单的替换你的 when 声明

gameBoard.findLast { it[0] == "." }?.set(0, "X") ?: println("No spaces")

另一答案

如果你需要替换内数组中的每个元素,你可以这样做。

    var gameBoard = Array(8) { Array(8) { "." } }
    val resultList: List<List<String>> = gameBoard.map { innerArray ->
        innerArray.map {
            if (it == ".") "X" else it
        }
    }

如果你只需要替换第一个元素(请注意,你可以在数组中替换第一个元素 resultList type changed)。)

    var gameBoard = Array(8) { Array(8) { "." } }
    val resultList: List<Array<String>> = gameBoard.map { innerArray ->
        val first = innerArray.first() // Expected that first element is present and not null
        innerArray.set(0, if (first == ".") "X" else first)
        innerArray
    }

如果你需要保存类型 Array<Array<String>> 使用 toTypedArray() 职能。

    var gameBoard = Array(8) { Array(8) { "." } }
    gameBoard = gameBoard.map { innerArray ->
        innerArray.map {
            if (it == ".") "X" else it
        }.toTypedArray()
    }.toTypedArray()

以上是关于如何压缩这些循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用事件侦听器来加载动画片段的循环

这些角度电子邮件指令代码片段如何连接

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

AVKit – 视频片段仅循环 2 次

压缩 Django 迁移时的循环依赖