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

Necesito tener una disposición de arreglo de 3x3 para guardar información. ¿Cómo declaro esto en C#?¿Cómo puedo declarar una matriz de cadenas bidimensionales?

+3

La documentación muestra claramente cómo hacerlo: http://msdn.microsoft.com/es-es/ /library/9b9dty7d.aspx –

+0

Consulte también [c-how-to-initialize-an-array-of-2d-arrays] (http://stackoverflow.com/questions/7775458/c-how-to-initialize-an -array-of-2d-arrays) – nawfal

+1

Tenga en cuenta que existe una diferencia entre el código OP [] [] (estructura de matriz dentada) y la respuesta aceptada [,] (multidimensional), de acuerdo con el enlace anterior. – amalgamate

Respuesta

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

También puede crear una instancia en la misma línea con la sintaxis de inicializador de matriz como sigue:

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

O 'var tablero = nueva cadena [3,3];' si está utilizando C# 3 o posterior – bdukes

+8

Si usa la sintaxis del inicializador de matriz no necesita proporcionar los límites (es decir, puede simplemente escribir 'nueva cadena [,] ') – bdukes

+0

No es necesario que escriba' new string [,] 'en absoluto ...' string [,] Tablero = {{"a", "b", "c"}, {"d "," e "," f "}, {" g "," h "," i "}}' –

41

Usted probablemente quiera esto:

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

Esto creará una matriz similar a una matriz donde todas las filas tienen la misma longitud.

La matriz en su muestra es una llamada jagged array, es decir, una matriz de matrices donde los elementos pueden ser de diferentes tamaños. Una matriz escalonada tendría que ser creado de una manera diferente:

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

También puede utilizar inicializadores para llenar los elementos de la matriz con datos:

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

Y en caso de una matriz escalonada:

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

asumo que está buscando esto:

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

La sintaxis de una matriz escalonada es:

 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

Cuando usted está tratando de crear una matriz multidimensional todo lo que tiene que hacer es añadir una coma a la declaración de este modo:

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

Hay muchos ejemplos sobre cómo trabajar con matrices en C# here.

Espero que esto ayude.

Gracias, Damian

4

string[][] es no una matriz de dos dimensiones, es una matriz de matrices (a matriz escalonada). Eso es algo diferente.

Declarar una matriz de dos dimensiones, utilice la siguiente sintaxis:

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

Si realmente quiere un jagged array, es necesario inicializar así:

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

Usted acaba de declarar un dentado formación. Este tipo de matrices puede tener diferentes tamaños para todas las dimensiones. Por ejemplo:

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

En su caso necesita una matriz regular. Ver respuestas arriba. More about jagged arrays

3

Un 3x3 (multidimensional) matriz también se puede inicializar (ya ha declarado) de esta manera:

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

-1: esto es lo mismo que http://stackoverflow.com/a/3814169/76337 y http://stackoverflow.com/a/3814164/76337 –

+0

@JohnSaunders No puedo ver. Dejar todo el tipo ignorado en el rhs es algo diferente. – nawfal

+0

No, es exactamente lo mismo. –

7

Hay 2 tipos de matrices multidimensionales en C#, llamado Multidimensional y Jagged.

Multidimensional que pueda por:

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

Para matriz escalonada que tiene que escribir un poco más de código:

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

En matriz escalonada corta es más rápido y tiene una sintaxis intuitiva. Para obtener más información, consulte: this Stackoverflow question

+2

En el caso irregular puede inicializarlo directamente como 'string [] [] jagged = {new [] {" a ", "b", "c"}, nuevo [] {"d", "e", "f"}, nuevo [] {"g", "h", "i"}}; '** o ** 'var jagged = new [] {new [] {" a "," b "," c "}, new [] {" d "," e "," f "}, new [] {" g ", "h", "i"}}; ' – nawfal

1

, también puede escribir el código a continuación.

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

donde 'i' es el número de filas y 'j' es el número de columnas. utilizando el método 'typeof (..)' puede elegir el tipo de matriz, por ejemplo int, cadena, doble

Cuestiones relacionadas