Сумма всех чисел в многомерном массиве

1

В настоящее время я изучаю С# и сталкиваюсь с некоторыми проблемами с многомерным массивом.

Я не могу понять, как найти сумму всех элементов в массиве. Например

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);
    }
}

Есть идеи?

  • 0
    Спасибо за все ваши ответы. Ценю всю помощь.
Теги:
multidimensional-array

4 ответа

3
Лучший ответ

Просто переместите строку 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.

  • 0
    Гиз не понял, что это было так просто. Потратьте час вчера, пытаясь понять это. Люблю этот сайт уже.
  • 2
    @ Дау, рад, что вы нам нравитесь. Я настоятельно рекомендую узнать о точках останова и пошаговом выполнении кода =)
5

Другой ответ указал, что не так с вашим кодом. Здесь короткая альтернатива вашим циклам с использованием 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.

4

Так как вы все равно учитесь и играете, вы можете использовать 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() просто добавляет их все.

1

Если все, что вам нужно, это сумма всего массива, тогда

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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню