多维数组作为方法的参数

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 中将多维数组作为参数传递

C语言中当二维数组和多维数组作为函数参数时[重复]

动态大小的多维数组的 C++ 解决方法

C 语言数组 ( 多维数组做函数形参退化为指针过程 | int array[2][3] -> int array[][3] -> int (*array)[3] )

多维数组的Qt QVector

数组的使用 多维数组