¿Cómo puedo declarar una matriz de cadenas bidimensional?

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

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

Olivier Rogier
fuente
3
La documentación muestra claramente cómo hacerlo: msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya
1
Tenga en cuenta que hay una diferencia entre el código OP [] [] (estructura de matriz irregular) y la respuesta aceptada [,] (multidimensional), según el enlace anterior.
amalgama

Respuestas:

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

También puede instanciarlo en la misma línea con la sintaxis del inicializador de matriz de la siguiente manera:

string[,] Tablero = new string[3, 3] {{"a","b","c"},
                                      {"d","e","f"}, 
                                      {"g","h","i"} };
explorador
fuente
2
O var tablero = new string[3,3];si está usando C # 3 o posterior
bdukes
9
Si usa la sintaxis del inicializador de matriz, no necesita proporcionar los límites (es decir, solo puede escribir new string[,])
bdukes
2
No necesitas escribir new string[,]nada ...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Jim Balter
3
Para aclarar que los primeros 3 en [3, 3] es el número de filas, el segundo 3 es el número de columnas (todos parecen haber elegido [3, 3] solo para confundir :-))
bytedev
54

Probablemente quieras esto:

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

Esto le creará una matriz en forma de matriz donde todas las filas tienen la misma longitud.

La matriz en su muestra es una llamada matriz irregular , es decir, una matriz de matrices donde los elementos pueden ser de diferente tamaño. Una matriz dentada debería crearse 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 usar 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 el caso de una matriz irregular:

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"}
};
Dirk Vollmar
fuente
15

Acaba de declarar una matriz irregular. 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. Vea las respuestas arriba. Más sobre matrices dentadas

Bashir Magomedov
fuente
11

Supongo que estás buscando esto:

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

La sintaxis de una matriz irregular es:

        string[][] Tablero = new string[3][];
        for (int ix = 0; ix < 3; ++ix) {
            Tablero[ix] = new string[3];
        }
Hans Passant
fuente
10

Hay 2 tipos de matrices multidimensionales en C #, llamadas Multidimensionaly Jagged.

Para multidimensionales puedes:

cadena [,] multi = nueva cadena [3, 3];

Para una matriz irregular, debe 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 resumen, la matriz irregular es más rápida y tiene una sintaxis intuitiva. Para obtener más información, consulte: esta pregunta de Stackoverflow

Lev
fuente
3
En el caso irregular, puede inicializarlo directamente como string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; o var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal
6
string[,] Tablero = new string[3,3];
Chris Almond
fuente
6

string[][]no es una matriz bidimensional, es una matriz de matrices (una matriz irregular ). Eso es algo diferente.

Para declarar una matriz bidimensional, use esta sintaxis:

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

Si realmente desea una matriz dentada , debe inicializarla así:

string[][] tablero = new string[][] { new string[3], 
                                      new string[3], 
                                      new string[3] };
Heinzi
fuente
6

También se puede inicializar una matriz 3x3 (multidimensional) (ya la ha declarado) de esta manera:

string[,] Tablero =  {
                        { "a", "b", "c" },
                        { "d", "e", "f" }, 
                        { "g", "h", "i"} 
                     };
nawfal
fuente
1
-1: esto es lo mismo que stackoverflow.com/a/3814169/76337 y stackoverflow.com/a/3814164/76337
John Saunders
@JohnSaunders No logro ver. Dejar todo el tipo ignorado en el lado derecho es algo diferente.
nawfal
1
No, es exactamente lo mismo.
John Saunders
1
@JohnSaunders Estaba sugiriendo una forma diferente de inicializar. No muchos saben que puede omitir el tamaño e incluso escribir en rhs durante la inicialización de la matriz. Por supuesto que hace lo mismo. Dado que la pregunta es más como "cómo declaro / inicializo", esta también es una forma. Vea esta respuesta de Eric en la que menciona por separado cada técnica.
Nawfal
2
Oh, ok. Me desharía de mi voto negativo, pero parece que ya ha desaparecido.
John Saunders
6

Cuando intentas crear una matriz multidimensional, todo lo que necesitas hacer es agregar una coma a la declaración así:

string[,] tablero = new string[3,3].
hav2play21
fuente
3

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. usando el método 'typeof (..)' puede elegir el tipo de su matriz, es decir, int, string, double

Stavros Afxentis
fuente
0

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

Espero que esto ayude.

Gracias Damian

Damian Schenkelman
fuente