如何计算多维数组

时间:2017-01-11 03:49:14

标签: c# multidimensional-array

我想要做的是获取用户输入的每一行的平均值。我能够显示输入,但不知道如何计算每行中三个数字的平均值。什么是解决方案?我是C#的新手,所以还在学习。

这是我的代码:

class Program
    {
        static void Main(string[] args)
        {
            int[,] number = new int[3, 5];
            for (int i = 0; i < 3; i++)
            {
                for (int x = 0; x < 3; x++)
                {
                    Console.WriteLine("Please enter number");
                    number[x, i] = int.Parse(Console.ReadLine());
                }
            }

            for (int i = 0; i < 3; i++)
            {
                for (int x = 0; x < 3; x++)
                {
                    Console.Write(number[x, i] + " ");
                }
                Console.WriteLine(" ");
                Console.ReadLine();
            }
        }
    } 

4 个答案:

答案 0 :(得分:1)

你可以这样做

for(int i = 0; i < 3; i++)
{
    int Avg = 0;
    for(int x = 0; x < 3; x++)
    {
        Console.Write(number[x, i] + " ");
        Avg += number[x, i];
    }
    Avg = Avg / 3;
    Console.Write("Average is" + Avg);
    Console.WriteLine(" ");
    Console.ReadLine();
}

答案 1 :(得分:1)

我认为你必须创建一个类似下面的方法,它将接受一个二维数组作为输入并迭代它的行,并进一步迭代将通过其cols执行以找到每行中所有元素的总和然后它将用cols数除以得到平均数。看一下方法

public static void rowWiseAvg(int[,] inputArray)
{
    int rows = inputArray.GetLength(0);
    int cols = inputArray.GetLength(1);

    for (int i = 0; i < rows; i++)
    {
        float rowAvg = 0;
        for (int x = 0; x < cols; x++)
        {                  
            rowAvg += inputArray[i,x];
        }
        rowAvg = rowAvg / cols;
        Console.Write("Average of row {0} is :{1}", i,rowAvg);         
    }
}

另外需要注意的事项:当您读取多维数组的值时,请使用外部循环读取行的值,使用内部循环读取列。在您的情况下,您实际上是先读取列,然后获取列中每行的值。另外,使用float / double来存储平均值

答案 2 :(得分:1)

这是(主要)LINQ解决方案:

var array = new int[,] 
{ 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 }, 
    { 9, 10, 11, 12 } 
};

int count = 0;
var averages = array.Cast<int>()
                    .GroupBy(x => count++ / array.GetLength(1))
                    .Select(g => g.Average())
                    .ToArray();

// [2.5, 6.5, 10.5]

答案 3 :(得分:1)

最简单的方法是使用for循环,如其他答案中所述 您也可以使用LINQ并使用Enumerable.Range以另一种方式:

public static class MultidimensionalIntArrayExtensions
{
    // Approach 1 (using Select and Average)
    public static double[] RowAverages(this int[,] arr)
    {
        int rows = arr.GetLength(0);
        int cols = arr.GetLength(1);

        return Enumerable.Range(0, rows)
            .Select(row => Enumerable
                .Range(0, cols)
                .Select(col => arr[row, col])
                .Average())
            .ToArray();
    }

    // Approach 2 (using Aggregate)
    public static double[] RowAverages(this int[,] arr)
    {
        int rows = arr.GetLength(0);
        int cols = arr.GetLength(1);

        return Enumerable.Range(0, rows)
            .Select(row => Enumerable
                .Range(0, cols)
                .Aggregate(0.0, (avg, col) => avg + ((double)arr[row, col] / cols)))
            .ToArray();
    }
}

// Usage:
int[,] arr =
{
    { 1, 2, 3 },
    { 2, 3, 4 },
    { 3, 4, 5 },
    { 6, 7, 8 },
    { 1, 1, 1 }
};

double[] rowSums = arr.RowAverages(); // [2, 3, 4, 7, 1]

对于某些开发人员来说,此代码可能看起来不可读且非OOP;对其他人来说可能看起来很好而且简洁。如果您属于第二组,请使用此代码。