【问题标题】:М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[,]”的“多维数组”

标签: c# arrays multidimensional-array methods


【解决方案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())。

【讨论】:

  • 但“其次”不是必须的吗?
  • “第二”部分使程序崩溃,是的!
猜你喜欢
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多