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;
}
为了完整起见,我应该指出,您可以使用LinqEnumerable.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;
}
为了完整起见,我应该指出,您可以使用LinqEnumerable.Select()
来简化代码,如下所示:
static double[] FindLargest(double[][] NumsInNums)
{
return NumsInNums.Select(array => array.Max()).ToArray();
}
.Select()
获取numnumnums
的每个元素(每个元素都是一个数组),然后为其调用Enumerable.Max()
,然后获取所有结果并将其放入一个数组中(通过ToArray()
)。构造数组的语法错误。您需要使用适当的数组构造语法,即“锯齿数组”,而不是“多维数组”,它看起来像“double[,]
”,这只是构造数组的语法错误。您需要使用适当的数组构造语法,这是一个“锯齿数组”,而不是一个看起来像“double[,]
”的“多维数组”,但是“secondary”不是必须的,是吗?“secondary”部分使程序崩溃,是的!但是“第二”不是必须的,是吗?第二部分使程序崩溃,所以是的!