我无法将int [] []转换为int [,]并且无法定义int [] []数组

Rea*_*ddy 0 c# multidimensional-array

我正在尝试解决编码网站上的挑战.问题是关于int矩阵.我正在使用c#language.我需要创建一个函数,它将参数作为int[][](整数矩阵)并返回int[][](另一个整数矩阵).问题的开始(给我的空函数)就是这样

int[][] boxBlur(int[][] image) {

}
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所尝试的

int[][] boxBlur(int[][] image) {

int pixelLength = image[0].Length - 2;
int[][] newBox = new int[pixelLength][pixelLength];
int pixelSum = 0;   
int c = 0;

  for(int t = 0; t<pixelLength; t++)
  {
    for(int i = 0; i<pixelLength; i++)
    {
        for(int j = t; j < 3 + t ; j++)
        {
            for(int k = i; k < i+3 ; k++)
            {
                pixelSum += image[j][k];
            }
        } 
        newBox[t][i] = pixelSum / 9;
    }
 }    
 return newBox;
}
Run Code Online (Sandbox Code Playgroud)

现在我对算法没有任何问题,可能它会起作用,但问题是我无法定义类似的数组int[][].它给出了一个错误Cannot implicitly convert type int to int[][],当我尝试创建这个数组时

int[,] newBox = new int[pixelLength,pixelLength];

它也会给出错误,因为它表示返回类型错误,我无法更改返回类型,所以我需要定义一个完全相同的矩阵int[][].

有没有办法做到这一点,还是我需要尝试另一种方式?

InB*_*een 6

int[][]是一个锯齿状的数组,换句话说,是一个数组数组.

当你看到a时int[],你将它理解为一个整数数组.也就是说,数组的每个"槽"都保持整数.数组数组完全相同,只是每个插槽都包含一个数组.

一旦理解了这一点,就应该理解为什么初始化锯齿状数组的正确方法是:

int[][] newBox = new int[pixelLength][];
Run Code Online (Sandbox Code Playgroud)

现在你说,newBox为int数组的数组:newBox[0]是类型的int[],newBox[1]是类型的int[],等等.因为数组的缺省值,像任何其他引用类型,是null,的值newBox[0],newBox[1]等是null; 你需要初始化它们中的每一个.

当然,锯齿状阵列的优点是每个都int[]可以是您想要的大小,因此称为锯齿状阵列.

因此,在正确初始化锯齿状阵列之后,您实际上缺少的是int[]在使用它们之前将每个阵列的每个人都初始化.你可以在适当的循环内完成.

从这里继续应该很容易.

验证您是否正确理解所有内容的有趣测试是初始化并正确填写以下类型的所有值:

int[][][] myHeadHurtsArray;
Run Code Online (Sandbox Code Playgroud)