# 问题内容:

I have a matrix and I want to return an array containing as elements the sum of each row elements of the matrix.

```
int [] sum;
for (var i = 0; i < m; i++)
{
for (var j = 0; j < result.Pages[i].Actual.Count; j++)
{
sum[i] += result.Pages[i].Actual[j];
}
}
```

This is how I tried to do it but seems it is not working. Any ideas?

# 答案:

## 答案1:

Use `var m = a.GetLength(0);`

to get number of rows, and `var n = a.GetLength(1);`

to get number of columns.

## 答案2:

now that looks like a different story after you edit:

Actually the first problem would be a `NullreferenceException`

because `int[]sum`

is not initialized!

Anyway, so it seems that you have an array of arrays. In this case you would need the `Length`

of the `Pages`

array to save your results. The first loop iterates over it using `i`

and will run until `result.Pages.Length`

. For each `i`

you have correctly implemented a second loop where you sum up the result.

```
int [] sum = new int[result.Pages.Length];
for (var i = 0; i < result.Pages.Length; i++)
{
for (var j = 0; j < result.Pages[i].Actual.Length; j++)
{
sum[i] += result.Pages[i].Actual[j];
}
}
```

If you collections are `List`

‘s then you need to use `Count`

instead of `Length`

The Linq solution would look like this:

```
int [] sum = result.Pages.Select(x=>x.Sum()).ToArray();
```

EDIT:

`double?`

means that you have a nullable data type. This is different from the normal `double`

. Furthermore the default value will be `null`

That means that you need to change the initialize the value at position `i`

.

```
double? [] sum = new double?[result.Pages.Length];
for (var i = 0; i < result.Pages.Length; i++)
{
sum[i] = 0;
for (var j = 0; j < result.Pages[i].Actual.Length; j++)
{
sum[i] += result.Pages[i].Actual[j];
}
}
```

## 答案3:

I expected this to become a pretty one line linq approach – sorry but at least it’s one line

```
int[,] items = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } };
int[] sum = Enumerable.Range(0, items.GetLength(0))
.Select(x => Enumerable.Range(0, items.GetLength(1))
.Sum(y => items[x,y])).ToArray();
//sum[] == {6,9,12}
```

for-loop appraoch

```
int[,] items = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } };
int[] sum = new int[items.GetLength(0)];
for (int i = 0; i < items.GetLength(0); i++)
for (int j = 0; j < items.GetLength(1); j++)
sum[i] += items[i, j];
//sum[] == {6,9,12}
```

## 原文地址：

https://stackoverflow.com/questions/47755761/save-the-sum-of-each-row-of-a-matrix-into-an-array

– user3654571

48 mins ago

`Pages`

? a`List`

?