59
string[][] Tablero = new string[3][3]; 

Ho bisogno di disporre di un array 3x3 per salvare le informazioni. Come posso dichiararlo in C#?Come posso dichiarare un array di stringhe bidimensionale?

+3

La documentazione mostra chiaramente come farlo: http://msdn.microsoft.com/en-us /library/9b9dty7d.aspx –

+0

Vedere anche [c-how-to-initialize-an-array-of-2d-array] (http://stackoverflow.com/questions/7775458/c-how-to-initialize-an -array-of-2d-array) – nawfal

+1

Si noti che c'è una differenza tra il codice OP [] [] (struttura ad array frastagliata) e la risposta accettata [,] (multidimensionale), in base al link sopra. – amalgamate

risposta

87
string[,] Tablero = new string[3,3]; 

È possibile anche un'istanza nella stessa linea con la sintassi di inizializzazione array come segue:

string[,] Tablero = new string[3, 3] {{"a","b","c"}, 
             {"d","e","f"}, 
             {"g","h","i"} }; 
+1

Oppure 'var tablero = nuova stringa [3,3];' se stai usando C# 3 o successivo – bdukes

+8

Se si utilizza la sintassi di inizializzatore dell'array non è necessario fornire i limiti (cioè si può semplicemente scrivere 'nuova stringa [,] ') – bdukes

+0

Non è necessario scrivere' nuova stringa [,] 'a tutti ...' stringa [,] Tablero = {{"a", "b", "c"}, {"d "," e "," f "}, {" g "," h "," i "}}' –

41

È probabilmente lo vuoi:

string[,] Tablero = new string[3,3]; 

Questo creerà un array simile alla matrice in cui tutte le righe hanno la stessa lunghezza.

L'array nel campione è un cosiddetto jagged array, ovvero una matrice di matrici in cui gli elementi possono essere di dimensioni diverse. Una matrice irregolare dovrebbe essere creato in un modo diverso:

string[][] Tablero = new string[3][]; 
for (int i = 0; i < Tablero.GetLength(0); i++) 
{ 
    Tablero[i] = new string[3]; 
} 

È anche possibile utilizzare inizializzatori per riempire gli elementi della matrice con i dati:

string[,] Tablero = new string[,] 
{ 
    {"1.1","1.2", "1.3"}, 
    {"2.1","2.2", "2.3"}, 
    {"3.1", "3.2", "3.3"} 
}; 

E in caso di matrice irregolare:

string[][] Tablero = new string[][] 
{ 
    new string[] {"1.1","1.2", "1.3"}, 
    new string[] {"2.1","2.2", "2.3"}, 
    new string[] {"3.1", "3.2", "3.3"} 
}; 
9

presumo che stai cercando questo:

 string[,] Tablero = new string[3,3]; 

La sintassi per una matrice irregolare è:

 string[][] Tablero = new string[3][]; 
     for (int ix = 0; ix < 3; ++ix) { 
      Tablero[ix] = new string[3]; 
     } 
3
string[,] Tablero = new string[3,3]; 
3

Quando si sta tentando di creare un array multi-dimensionale tutto quello che dovete fare è aggiungere una virgola alla dichiarazione in questo modo:

string[,] tablero = new string[3,3]. 
1

Ci sono molti esempi su come lavorare con gli array in C# here.

Spero che questo aiuti.

Grazie, Damian

4

string[][] è non una matrice bidimensionale, è un array di array (un frastagliata matrice). È qualcosa di diverso.

Per dichiarare una matrice bidimensionale, usando la seguente sintassi:

string[,] tablero = new string[3, 3]; 

Se si vuole veramente un jagged array, è necessario inizializzare in questo modo:

string[][] tablero = new string[][] { new string[3], 
             new string[3], 
             new string[3] }; 
9

Hai appena dichiarata frastagliata array. Questo tipo di array può avere dimensioni diverse per tutte le dimensioni. Ad esempio:

string[][] jaggedStrings = { 
new string[] {"x","y","z"}, 
new string[] {"x","y"}, 
new string[] {"x"} 
}; 

Nel tuo caso hai bisogno di un array regolare. Vedi le risposte sopra. More about jagged arrays

3

Un 3x3 (multidimensionale) array può anche essere inizializzato (si è già dichiarato) in questo modo:

string[,] Tablero = { 
         { "a", "b", "c" }, 
         { "d", "e", "f" }, 
         { "g", "h", "i"} 
        }; 
+0

-1: questo è lo stesso di http://stackoverflow.com/a/3814169/76337 e http://stackoverflow.com/a/3814164/76337 –

+0

@JohnSaunders Non riesco a vedere. Lasciare l'intero tipo ignorato sul rh è qualcosa di diverso. – nawfal

+0

No, è esattamente lo stesso. –

7

Ci sono 2 tipi di array multidimensionali in C#, chiamato Multidimensional e Jagged.

Per multidimensionale è possibile da:

string[,] multi = new string[3, 3];

Per matrice irregolare si deve scrivere un po 'più di codice:

string[][] jagged = new string[3][]; 
      for (int i = 0; i < jagged.Length; i++) 
      { 
       jagged[i] = new string[3]; 
      } 

Insomma matrice irregolare è sia più veloce e ha la sintassi intuitiva. Per maggiori informazioni vedi: this Stackoverflow question

+2

Nel caso frastagliato puoi inizializzarlo direttamente come 'string [] [] jagged = {new [] {" a ", "b", "c"}, nuovo [] {"d", "e", "f"}, nuovo [] {"g", "h", "i"}}; '** o ** 'var jagged = new [] {new [] {" a "," b "," c "}, nuovo [] {" d "," e "," f "}, nuovo [] {" g ", "h", "i"}}; ' – nawfal

1

puoi anche scrivere il codice qui sotto.

Array lbl_array = Array.CreateInstance(typeof(string), i, j); 

dove "i" è il numero di righe e "j" è il numero di colonne. usando il metodo 'typeof (..)' puoi scegliere il tipo di array cioè int, string, double

Problemi correlati