Este post sale, como el anterior, de una pregunta concreta que me ha hecho un alumno en campusMVP. La cuestión viene acerca de cómo se definen las matrices de varias dimensiones en .NET, lo cual es válido tanto para VB como para C#.

La clave está en que se debe pensar en las matrices de más de una dimensión como en "Matrices de matrices", y así se entiende mucho mejor.

Por ejemplo, si quieres utilizar coordenadas de 3 dimensiones del estilo de (x,y,z) realmente no te hace falta una matriz tridimensional, ya que puedes guardarla en una de dos dimensiones si piensas en lo he dicho de "matrices de matrices". Así, por ejemplo para guardar coordenadas como las anteriores puedes escribir:

int[,] arr1 = { {1,2,3}, {4,5,6} };

Es decir, aunque tus "ristras" de datos tengan tres elementos debes usar sólo dos dimensiones porque lo que obtienes es una matriz que contiene en cada fila a otras matrices, así que con la primera dimensión indicas la fila y con la segunda la columna, así:

Console.WriteLine( arr1[0,1] );

Así lo que consigues es una matriz bidimensional pero cuyas filas tienen tres elementos, es decir, una matriz en este caso de dos filas y tres columnas:

1   2   3
4   5   6

Al coger el elemento (0,1) estás indicando que te de el segundo elemento de la primera fila (recuerda que están basadas en cero), es decir, el número 2, pero si pidieras el (1,2) te devolvería el 6 (tercer elemento de la segunda fila).

Si quieres definir una matriz tridimensional tendrías que definir una "matriz de matrices de matrices", es decir, tendrías que hacer un doble anidamiento. Por ejemplo, puedes definir una matriz 3D así:

        int[,,] arr2 = { 
            { {1,2,3}, {4,5,6} }, 
            { {7,8,9}, {10,11,12}  } 
            };
        
        Console.WriteLine( arr2[0,1,1] );

Esto devolvería el número 5 ya que coges la primera matriz de matrices, dentro de ésta coges la segunda matriz y dentro de ésta el segundo elemento.

Estos conceptos serían exactamente los mismos en VB, con una definición de matrices prácticamente idéntica:

Dim arr1(,) As Integer = { {1,2,3}, {4,5,6} }
Console.WriteLine( arr1(0,1) )
Dim arr2(,,) As Integer = _
{ _
    { {1,2,3}, {4,5,6} }, _
    { {7,8,9}, {10,11,12} } _
}
Console.WriteLine( arr2(0,1,1) )

Espero que os resulte útil.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor