Вы можете использовать sum
и sumBy
для достижения этого.
Ниже приведены 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()
результатам.Возможно, это не самый эффективный способ, но он вполне читабелен.