5

我在遗留代码中发现以下行:

protected bool[,] PixelsChecked;

这里是什么[,]意思?

4

5 回答 5

10

这是一个二维数组。

在 .NET 中,您可以拥有两种类型的非单维数组:

  1. 多维数组:

    int[,] a;    // 2 dimensions
    int[,,] b;   // 3 dimensions, and so on
    
  2. 锯齿状数组(数组的数组):

    int[][] a;   // an array of arrays of ints
    int[][][] a; // an array of arrays of arrays of ints
    

在这两种情况下,您都需要在使用变量之前对其进行初始化。

用法也不同,在第一种情况下:

int value = a[1, 2]; // note the comma, and single pair of brackets

在第二种情况下,您需要分别处理每个数组:

int value = a[1][2]; // the first [1] will return an array, and then you take
                     // the 3rd element (0-based) of that

还要记住,您可以在一个语句中初始化一个多维数组:

int[,] a = new int[10, 20];

而锯齿状数组的单个语句将创建一个充满空引用的数组:

int[][] a = new int[10][];

您还需要将该数组的所有元素初始化为其相应的数组引用,这是在一个语句中使用 LINQ 执行此操作的一种快速方法:

int[][] a = Enumerable.Range(0, 10).Select(new int[20]).ToArray();
// 10 x 20

另请参阅有关该主题的 MSDN 页面以获取更多信息。


有趣的事实:JITter 为访问锯齿状数组生成的代码比它为多维数组生成的代码更快,有关更多信息,请参阅此问题

于 2013-05-19T12:16:48.777 回答
8

[,]一个二维数组。

您可以像这样初始化它:

protected bool[,] PixelsChecked = new bool[Width, Height];

这是您访问它的方式:

bool leftTop = PixelsChecked[0, 0];

它基本上是一个带有值的矩形,您可以使用[x,y].

您还可以使用创建 3 维和更多维数组

protected bool[,,] Cube = new bool[5,5,5];

protected bool[,,,] _4dimensional = new bool[10,10,10,10];
于 2013-05-19T12:15:37.153 回答
5

它是多维数组的语法

数组可以有多个维度。

在这种情况下,它是二维数组。一个数组可以有很多维度。使用 C# 中的特殊语法可以使用多维数组。

对于语法用法,如果要声明n-diamensional array,则应使用逗号n-1时间。

当你使用bool[,] PixelsChecked它时,它声明了一个二维数组PixelsChecked,它们的元素类型为boolean.

例子;

bool[,] PixelsChecked = new bool[2,2];

PixelsChecked[0, 0] = true;
PixelsChecked[0, 1] = false;
PixelsChecked[1, 0] = true;
PixelsChecked[1, 1] = false;

请记住,您需要在使用数组之前对其进行初始化。

例如,二维数组对平面建模,而三维数组对立方体或其他结构建模。

于 2013-05-19T12:15:25.550 回答
3

它是一个二维数组,基本上是一个布尔值的二维网格。

要创建一个,您可以这样做

protected bool[,] PixelsChecked = new bool[Width, Height];

你甚至可以制作第三维

protected bool[,,] PixelsChecked = new bool[Width, Height, Length];

如果要获取或设置某个坐标

bool Value  = PixelsChecked[X,Y];

你可以用数组做很多事情,而且有很多类型。你可以在这里这里找到一个很好的教程。

于 2013-05-19T12:19:50.177 回答
2

bool[,]是 s 的二维数组bool

基本上,而不是像这样的数组:

true, false, false, true, false, true, etc.

它的结构是这样的:

true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
true, false, false, true, false, true, etc.
etc.

所以你可以访问,让我们说第二个项目和第三个项目,像这样:

arrayName[1,2];

还有其他方法可以做到这一点,比如制作一个数组数组,但这保持一个恒定的长度,并且更好。

于 2013-05-19T12:16:41.317 回答