C# М;多维А;将rrays作为方法的参数

C# М;多维А;将rrays作为方法的参数,c#,arrays,multidimensional-array,methods,C#,Arrays,Multidimensional Array,Methods,我编写了一个方法,该方法将多维数组作为参数,并返回每个数组的最大值: static double[] FindLargest( double[][] NumsInNums ) { double[] Larges = new double[] {}; int i = 0; foreach( double[] Nums in NumsInNums ) { Larges[i] = Nums.Max(); i++; } return

我编写了一个方法,该方法将多维数组作为参数,并返回每个数组的最大值:

static double[] FindLargest( double[][] NumsInNums ) {
    double[] Larges = new double[] {};
    int i = 0;

    foreach( double[] Nums in NumsInNums ) {
       Larges[i] = Nums.Max();
       i++;
    }

    return Larges;
}
但当我称之为:

static void Main(string[] args)
{
    double[] nums = FindLargest( {{4, 2, 7, 1}, {20, 70, 40, 90}, {1, 2, 0}} );

    foreach(double num in nums) {
        Console.WriteLine(num);
    }
}
但这一错误出现了:


这里怎么了?

您有两个问题。首先,数组声明的语法无效。应该是这样的:

var nums = FindLargest( 
    new []
    {
        new double[] { 4, 2, 7, 1}, 
        new double[] { 20, 70, 40, 90},
        new double[] { 1, 2, 0}
    });
(我认为这在您的实际代码中可能还可以,因为您似乎在询问另一个问题;请参见下文!)

其次,在
FindLargest()
方法中,您正在创建结果数组,
Larges
的大小为零。您需要使用正确的大小创建它以容纳所有结果-在这种情况下,它必须与
numsinums
数组大小相同,您可以通过
numnums.Length
找到该数组:

static double[] FindLargest(double[][] NumsInNums)
{
    double[] Larges = new double[NumsInNums.Length];
    int      i      = 0;

    foreach (double[] Nums in NumsInNums)
    {
        Larges[i] = Nums.Max();
        i++;
    }

    return Larges;
}
为了完整起见,我应该指出,您可以使用Linq
Enumerable.Select()
来简化代码,如下所示:

static double[] FindLargest(double[][] NumsInNums)
{
    return NumsInNums.Select(array => array.Max()).ToArray();
}

.Select()
获取
numnumnums
的每个元素(每个元素都是一个数组),然后为其调用
Enumerable.Max()
,然后获取所有结果并将其放入数组(通过
ToArray()
)。

您有两个问题。首先,数组声明的语法无效。应该是这样的:

var nums = FindLargest( 
    new []
    {
        new double[] { 4, 2, 7, 1}, 
        new double[] { 20, 70, 40, 90},
        new double[] { 1, 2, 0}
    });
(我认为这在您的实际代码中可能还可以,因为您似乎在询问另一个问题;请参见下文!)

其次,在
FindLargest()
方法中,您正在创建结果数组,
Larges
的大小为零。您需要使用正确的大小创建它以容纳所有结果-在这种情况下,它必须与
numsinums
数组大小相同,您可以通过
numnums.Length
找到该数组:

static double[] FindLargest(double[][] NumsInNums)
{
    double[] Larges = new double[NumsInNums.Length];
    int      i      = 0;

    foreach (double[] Nums in NumsInNums)
    {
        Larges[i] = Nums.Max();
        i++;
    }

    return Larges;
}
为了完整起见,我应该指出,您可以使用Linq
Enumerable.Select()
来简化代码,如下所示:

static double[] FindLargest(double[][] NumsInNums)
{
    return NumsInNums.Select(array => array.Max()).ToArray();
}

.Select()
获取
numnumnums
的每个元素(每个元素都是一个数组),然后为其调用
Enumerable.Max()
,然后获取所有结果并将其放入一个数组中(通过
ToArray()
)。

构造数组的语法错误。您需要使用适当的数组构造语法,即“锯齿数组”,而不是“多维数组”,它看起来像“
double[,]
”,这只是构造数组的语法错误。您需要使用适当的数组构造语法,这是一个“锯齿数组”,而不是一个看起来像“
double[,]
”的“多维数组”,但是“secondary”不是必须的,是吗?“secondary”部分使程序崩溃,是的!但是“第二”不是必须的,是吗?第二部分使程序崩溃,所以是的!