获得三维数组的两个维度C#

Vin*_*nys 1 .net c# java

在java中,我可以这样做:

Square[][][] sheets;
public final Square[][] getSheet(int index) {
    return sheets[index];
}
Run Code Online (Sandbox Code Playgroud)

c#中的等价物是什么?由于多维数组的语法有点不同:

Square[,,] Sheets;
public Square[,] GetSheet(int index) {
    return ????
}
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 6

如果使用锯齿状数组,C#中的等效项是相同的:

private Square[][][] sheets;
public Square[][] GetSheet(int index) 
{
    return sheets[index];
}
Run Code Online (Sandbox Code Playgroud)

如果你有一个多维数组,那么获得三个维度中的两个并不是一种简单的方法.您可以做的最好是重新创建一个数组:

private Square[,,] sheets;
public Square[,] GetSheet(int index) 
{
    int x = sheets.GetLength(0);      
    int y = sheets.GetLength(1); 

    Square[,] sheet = new Square[x,y];
    for(int i = 0; i < x; i++)
    for(int j = 0; j < y; j++)
         sheet[i,j] = sheets[i,z,index];

    return sheet;
}
Run Code Online (Sandbox Code Playgroud)

我如何初始化Square[4][4][4]

您可以循环并初始化每个维度:

for(int i = 0; i < 4; i++)
{
    sheets[i] = new Square[4][];
    for(int j = 0; j < 4; j++)
    {
        sheets[i][j] = new Square[4];
    }
}
Run Code Online (Sandbox Code Playgroud)

(注意,如果Square是引用类型,那么你需要将每个初始化Square[i][j][k]为一个值,否则它将是null)

或者使用数组初始化语法;

sheets = new Square[4][][]
{
     new Square[4][] {new Square[4], new Square[4], new Square[4], new Square[4],},
     new Square[4][] {new Square[4], new Square[4], new Square[4], new Square[4],},
     new Square[4][] {new Square[4], new Square[4], new Square[4], new Square[4],},
     new Square[4][] {new Square[4], new Square[4], new Square[4], new Square[4],},
};
Run Code Online (Sandbox Code Playgroud)

显然,循环比初始化语法更容易扩展.