如何使用比较器和 lamda 函数根据它的列对 kotlin 中的二维数组进行排序?

问题描述 投票:0回答:1

我想在 Kotlin 中对二维数组进行排序,我知道如何在 Java 中进行排序,但它在 Kotlin 中不起作用,必须有不同的语法。我在网上冲浪,但找不到直接的语法解决方案。

我正在创建一个随机二维数组,我想根据它的第 3 列对其进行排序。

fun main(){
        val rows = 3
        val cols = 4

        val arr = Array(rows) { r -> IntArray(cols) { c -> r + ((Math.random()*9).toInt()) } }
        for (row in arr) {
            println(row.contentToString())
        }
// I want to sort here
// In Java I would do this: Arrays.sort(arr, Comparator.comparingDouble( o -> o[2] ))
}

如何在 Kotlin 中做同样的事情,在 Java 中我可以按以下方式对其进行排序:

Arrays.sort(arr, Comparator.comparingDouble( o -> o[2] ))

如何在 Kotlin 语法中做同样的事情?

arrays kotlin sorting multidimensional-array lambda
1个回答
0
投票

使用方法

sortBy
将允许您返回选定的排序条件。

import kotlin.random.Random
import kotlin.random.nextInt

val rows = 3
val cols = 4

val arr = Array(rows) { r -> 
    IntArray(cols) {
        r + Random.nextInt(1..5) * 9
    }
}

fun printArr() {
    for (row in arr) {
        println(row.contentToString())
    } 
}

printArr()
arr.sortBy { it[2] }
printArr()

// Generated:
// [36, 45, 45, 45]
// [19, 37, 28, 19]
// [11, 38, 11, 38]

// Output:
// [11, 38, 11, 38]
// [19, 37, 28, 19]
// [36, 45, 45, 45]
© www.soinside.com 2019 - 2024. All rights reserved.