多维数组作为方法的参数
Posted
技术标签:
【中文标题】多维数组作为方法的参数【英文标题】:Мultidimensional Аrrays as an argument for method 【发布时间】:2020-12-27 16:05:11 【问题描述】:我写了一个方法,它接受一个多维数组作为参数并返回每个数组的最大数:
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);
但出现此错误:
这里有什么问题?
【问题讨论】:
只是构造数组的语法错误。您需要使用适当的数组构造语法 这是一个“锯齿状数组”,而不是看起来像“double[,]
”的“多维数组”
【参考方案1】:
你有两个问题。首先,您的数组声明的语法无效。应该是这样的:
var nums = FindLargest(
new []
new double[] 4, 2, 7, 1,
new double[] 20, 70, 40, 90,
new double[] 1, 2, 0
);
(我认为这在您的实际代码中可能没问题,因为您似乎在问一个不同的问题;见下文!)
其次,在您的FindLargest()
方法中,您将创建大小为零的结果数组Larges
。您需要以正确的大小创建它以容纳所有结果 - 在这种情况下,它必须与 NumsInNums
数组的大小相同,您可以通过 NumInNums.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()
获取NumInNums
的每个元素(每个元素都是一个数组),然后为其调用Enumerable.Max()
,然后获取所有结果并将它们放入一个数组中(通过ToArray()
)。
【讨论】:
但“其次”不是必须的吗? “第二”部分使程序崩溃,是的!以上是关于多维数组作为方法的参数的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )