给定一个ArrayList
(行)的(一行中的元素),除了编写一个“ ”循环之外ArrayList
,有没有更好的方法来获得像 ( ) 这样的总和列表?row[0][0] + row[1][0] + .... row[n][0]
for
问问题
1012 次
2 回答
4
以下是 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]
(各自结果的指标。这可能不是最高效的方式,但它的可读性很强。indices
0
1
nCols
map
colSum()
于 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 回答