鉴于ArrayList
的ArrayList
(行)(连续元素),有没有更好的方式来获得,除了写“row[0][0] + row[1][0] + .... row[n][0]
”循环像(for
)总和的名单?
以下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]
(每行的索引0
值),总结这些值。
编辑:
关于你的问题在注释部分,以下两种方法:(1)计算所有的行总和,返回一个列表; (2)计算所有山坳款项,返回一个列表。
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]
),那么你得到它的indices
(即,它的列数0
,1
,...,高达nCols
),然后你map
这些指标各自colSum()
结果。这可能不是最高效的方式,但它是相当的可读性。
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