2017-05-20 2 views
0

Wie kann ich int cast [,] int [] []Guss Typ von gezackten Array (int [* *]) bis 2d Array (int [] [])

Wenn ich versuche, Unten ist ein Fehler aufgetreten.
kann nicht implizit Typen „int[*,*] zu int[][]

Mein Ziel erst konvertieren ist einen Jagged Array zu schaffen und es dann zu einer 2D-Array zu konvertieren.

private int[][] initStaticBoard() 
    { 

     int[,] board = new int[,] { 
      {0,0,0,0,0}, 
      {0,0,0,0,0}, 
      {0,0,0,0,0}, 
      {0,0,0,0,0}, 
      {0,0,0,0,0} 
     }; 
     int[][] result = board; 

     return result*emphasized text*; 
    } 

Antwort

4

Es gibt keine Umwandlung zwischen einem quadratischen Array und einem gezackten Array. Sie werden board in einem gezackten Array zu rekonstruieren:

public static T[][] SquareArrayToJAggedArray<T>(T[,] square) 
{ 
    T[][] jagged = new T[square.GetLength(0)][]; 

    for (int i = 0; i < jagged.Length; i++) 
    { 
     jagged[i] = new T[square.GetLength(1)]; 

     for (int j = 0; j < jagged[i].Length; j++) 
     { 
      jagged[i][j] = square[i, j]; 
     } 
    } 

    return jagged; 
} 

Und es nennen wie so:

private int[][] initStaticBoard() 
{ 
    int[,] board = new int[,] { 
     {0,0,0,0,0}, 
     {0,0,0,0,0}, 
     {0,0,0,0,0}, 
     {0,0,0,0,0}, 
     {0,0,0,0,0} 
    }; 

    int[][] result = SquareArrayToJaggedArray(board); 
    return result; 
} 

Anstatt sich Gedanken über die Umwandlung, würde ich jedoch empfehlen nur, dass man den einen oder wählen andere und bleibe dabei. Das Konvertieren zwischen den beiden beinhaltet das Zuweisen von neuem Speicher für das neue Array, der sich ziemlich schnell addieren kann, wenn Sie mit großen Arrays arbeiten oder zu häufig konvertieren. Aufgrund der Rekonstruktion wirken sich Änderungen am neuen Array nicht auf das alte Array aus und umgekehrt.

Wenn die Daten, die Sie darstellen, eine Struktur mit fester Breite und Länge sind, verwenden Sie ein quadratisches Array. Wenn verschiedene Unterfelder unterschiedliche Längen haben, verwenden Sie ein gezacktes Array.

0

Jagged Arrays können wie folgt initialisiert werden:

int[][] board = { new int[5], new int[5], new int[5], new int[5], new int[5] };