将Array <int>转换为Int kotlin 2D数组

时间:2019-03-19 05:17:03

标签: arrays multidimensional-array kotlin

在Kotlin中是否可以将Array<Int>转换为Int?我搞砸了2D数组,并试图打印索引彼此相等的元素。这是我尝试完成此操作的循环:

     for (rows in arr) {
         for (elements in rows) {
-------->    if (rows == elements) {
                 print(elements)
             }
         }
         print("\n")
     }

rows的类型为Array<Int>,而elements的类型为Int。我已经尝试过使用StringBuilder方法,但无法正常工作。是否有允许使用此功能的函数或其他方法?感谢我提供进一步研究的任何提示。

5 个答案:

答案 0 :(得分:1)

这是foreach的一种方法。关键是您可以按索引进行迭代,也可以通过将现有值与索引进行映射来进行迭代。

三种解决方法:

任何样式的编程语言:

    for(rowIndex in 0 until arr.size) {
        for(colIndex in 0 until arr[rowIndex].size) {
            if(colIndex == rowIndex) {
                println("[$rowIndex, $colIndex]: ${arr[rowIndex][colIndex]}")
            }
        }
    }

Python样式:(并使用解构语法)

    for ((rowIndex, row) in arr.withIndex()) {
        for ((colIndex, value) in row.withIndex()) {
            if(colIndex == rowIndex) {
                println("[$rowIndex, $colIndex]: $value")
            }
        }
    }

与以前相同,但使用的是lambda:

   arr.withIndex().forEach {
        (rowIndex, row) ->
        row.withIndex().forEach { (colIndex, value) ->
            if(colIndex == rowIndex) {
                println("[$rowIndex, $colIndex]: $value")
            }
        }
    }

答案 1 :(得分:0)

我可能会做这样的事情:

arr.indices.forEach { i ->
    arr[i].indices.forEach { j ->
        if (i == j) println("arr[$i][$j]==${arr[i][j]}")
    }
}

indices扩展名只是其中一种,但是由于您对它们最感兴趣,所以我认为这是一个很好的解决方案。

答案 2 :(得分:0)

如果您想要的数组中只有一个元素,并且知道它的索引,则绝对没有理由遍历该数组。所以我建议

for (i in arr.indices) {
    if (i < arr[i].size) {
        println("arr[$i][$i]==${arr[i][i]}")
    }
}

答案 3 :(得分:0)

您可以看到以下功能

fun printDiagonalElements(){
    val row1 = intArrayOf(1,2,3)
    val row2 = intArrayOf(4,5,6)
    val row3 = intArrayOf(7,8,9)
    val row4 = intArrayOf(10,5,6,16)
    val array : Array<IntArray> = arrayOf(row1,row2,row3,row4)

    for(i in 0 .. array.size-1){
        val row = array[i]
        for (j in 0 .. row.size-1){
            if(i == j){
                println(array[i][j])
            }
        }
    }
}

答案 4 :(得分:0)

我不确定为什么如果只需要一个值,这里提出的每个解决方案为什么都会迭代元素内部数组。

这是一种通过 one 循环在正方形2D数组的主对角线中打印数字的方法:

brotli

但是请注意,如果该数组中的行数多于列数,即数组不为正方形,则会抛出该错误。您可以添加检查以确保每个行数组中都有一个包含行索引的列:

arr.forEachIndexed { index, row -> 
    println("value at [$index, $index]: ${row[index]}")
}