В настоящее время я изучаю С# и сталкиваюсь с некоторыми проблемами с многомерным массивом.
Я не могу понять, как найти сумму всех элементов в массиве. Например
int[,] array = { { 52, 76, 65 }, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };
Таким образом, сумма должна быть:
52 + 76 + 65 + 98 +...
Я попытался использовать цикл for, но просто даю мне сумму каждого массива в размерности 1. Например
private int[,] array = { { 52, 76, 33}, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };
public void ArraySum()
{
double sum;
for (int i = 0; i < array.GetLength(0); i++)
{
sum = 0;
for (int j = 0; j < array.GetLength(1); j++)
sum += array[i, j];
Console.WriteLine("The sums are for the array {0} is {1}: ", i, sum);
}
}
Есть идеи?
Просто переместите строку sum = 0;
из первого цикла:
private int[,] array = { { 52, 76, 33}, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };
public void ArraySum()
{
int sum = 0;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
sum += array[i, j];
}
Console.WriteLine("The sum for the whole array is {0}: ", sum);
}
В вашем коде sum
сбрасывается до 0
для каждой подматрицы.
редактировать
Поскольку массив содержит значения int
, попробуйте объявить переменную sum
как int
вместо double
.
Другой ответ указал, что не так с вашим кодом. Здесь короткая альтернатива вашим циклам с использованием LINQ:
int[,] array = { { 52, 76, 65 }, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };
int sum = array.Cast<int>().Sum();
Cast
используется для преобразования многомерного массива в IEnumerable<int>
который затем позволяет использовать метод расширения Sum
.
Так как вы все равно учитесь и играете, вы можете использовать List<int<int>>
для хранения ваших значений вместо 2-мерного массива, например:
var array = new List<List<int>>
{
new List<int> {52, 76, 65},
new List<int> {98, 87, 93},
new List<int> {43, 77, 62},
new List<int> {72, 73, 74}
};
Затем вы можете легко использовать LINQ для получения вашей суммы:
var sum = array.SelectMany(x => x).Sum();
Если вы еще не слышали об этом, вы можете узнать больше о LINQ здесь.
В принципе, SelectMany()
выравнивает ваши множественные списки в один список, а затем Sum()
просто добавляет их все.
Если все, что вам нужно, это сумма всего массива, тогда
private static int[,] array = { { 52, 76, 33}, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };
public static void Main()
{
double sum = 0;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
sum += array[i, j];
}
Console.WriteLine("The sum for the array is {0}: ", sum);
}