2

给定一个ArrayList(行)的(一行中的元素),除了编写一个“ ”循环之外ArrayList,有没有更好的方法来获得像 ( ) 这样的总和列表?row[0][0] + row[1][0] + .... row[n][0]for

4

2 回答 2

4

您可以使用sumandsumBy来实现这一点。

以下是 3 种方法:(1) 计算整个矩阵的总和,(2) 计算给定行的总和,以及 (3) 计算给定列的总和:

val arr = arrayListOf(
        arrayListOf(1, 2, 3),
        arrayListOf(4, 5, 6),
        arrayListOf(7, 8, 9)
)

fun matrixSum() = arr.sumBy { it.sum() }
fun rowSum(row: Int) = arr[row].sum()
fun colSum(col: Int) = arr.sumBy {row -> row[col] }
// shorter alternative: fun colSum(col: Int) = arr.sumBy { it[col] }

根据您的问题,您想致电colSum(0)。这将提取row[0](每行的 index 值0)并对这些值求和。

编辑:

关于您在评论部分的问题,以下两种方法:(1)计算所有行总和,以列表形式返回;(2) 计算所有 col 总和,以列表形式返回。

fun rowSums() = arr.map { it.sum() }
fun colSums() = arr[0].indices.map { col -> colSum(col) }
// shorter alternative:
// fun colSums() = arr[0].indices.map(::colSum)
// another version that does not call colSum:
// fun colSums() = arr[0].indices.map { col -> arr.sumBy { row -> row[col] } }

解释一下colSums(假设所有行都具有相同的列数):首先,获取第一行arr[0](各自结果的指标。这可能不是最高效的方式,但它的可读性很强。indices01nColsmapcolSum()

于 2019-02-05T10:22:15.470 回答
1
val matrix = arrayListOf(
        arrayListOf(1, 2, 3),
        arrayListOf(4, 5, 6),
        arrayListOf(7, 8, 9)
)
val allSum = matrix.sumBy { it.sumBy { it } } // 45
val firstColumnSum = matrix.sumBy { it[0] } // 12
于 2019-02-05T10:13:20.723 回答