多维数组中所有数字的总和

时间:2014-10-10 00:59:34

标签: c# multidimensional-array

我正在学习C#并遇到多维数组的麻烦。

我似乎无法弄清楚如何找到数组中所有元素的总和。 E.g

int[,] array = { { 52, 76, 65 }, { 98, 87, 93 }, { 43, 77, 62 }, { 72, 73, 74 } };

所以总和应该是:

  

52 + 76 + 65 + 98 + ...

我曾尝试使用for循环,但只是给出了维度1中每个数组的总和.E.g

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

有什么想法吗?

4 个答案:

答案 0 :(得分: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扩展方法。

答案 1 :(得分:4)

既然你只是在学习和玩游戏,你可以使用List<int<int>>来存储你的值而不是二维数组,如下所示:

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

如果您还没有听说过,可以learn more about LINQ here

基本上,SelectMany()会将您的多个列表展平为一个列表,然后Sum()只会将它们全部添加。

答案 2 :(得分: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

答案 3 :(得分: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);
}