Saltar al contenido

Crear una matriz de matrices bidimensionales en C #

Solución:

Hay una respuesta simple a esto. Utilice instancias de la clase “System.Drawing.Point”. Cree una matriz de “puntos” para almacenar coordenadas. Para crear la matriz:

Point[] points = new Point[4];

Y para asignar un valor a la matriz (por ejemplo, en la posición 0) use el siguiente código.

points[0] = new Point(xvalue,yvalue);//Where "xvalue" and "yvalue" are integer variables.

Y para obtener los valores X e Y de una instancia de la clase de puntos. Utilice el siguiente código.

int xvalue = points[0].X;

int yvalue = points[0].Y;

PD: puedes usar estos puntos para asignar ubicaciones a los controles, pero esa es otra historia ^ _ ^

Un juego de corchetes más {} se requiere en la declaración inicial:

var waypoints = new int[4][,]   {
    new int[,] {{6}, {0}},
    new int[,] {{1}, {1}},
    new int[,] {{1}, {5}},
    new int[,] {{6}, {5}}
};

Esto se debe a que, para una matriz 2D, cada elemento de la matriz se considera una matriz para la inicialización (aunque normalmente se utiliza por elemento de la matriz, como val[0,0] = 4;).

Editar (después de los comentarios de los comentarios):

Poner en contraste con int[][] (conocido como jagged array, es decir: matriz de matrices cuyo miembro de matriz puede ser de diferente tamaño), int[,] es una matriz 2D con dimensión fija. Ambos son arreglos que almacenan arreglos y, por lo tanto, cada elemento del arreglo es un arreglo. Esto explica por qué es necesario poner otro corchete en su inicialización como se indicó anteriormente.

Dicha matriz 2D, cuando se inicializa de manera diferente, dará como resultado una dimensión diferente (y, por lo tanto, hay varias formas de inicializarla):

int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]

De cualquier manera se necesita un juego adicional de corchetes.

Por las diferencias entre jagged array y matriz multidimensional, de tamaño fijo, ya hay muchas buenas explicaciones / evaluaciones comparativas disponibles en línea de fuentes de renombre. Y entiendo que no sería significativo, aparte del interés del OP, que yo pusiera más información al respecto. (Y, por lo tanto, el alcance de esta respuesta se dirige originalmente solo a responder a la inicialización fallida).

Se entiende que la solución no se usa mejor para almacenar puntos de coordenadas (como lo hizo OP). La explicación anterior se da para explicar por qué su inicialización no funciona, en lugar de proporcionar la mejor solución para almacenar puntos de coordenadas. En cuanto al almacenamiento de puntos de coordenadas, Point in the System.Drawing struct será más apropiado (como se sugiere en el comentario).

El uso de una matriz 2D para representar un solo punto en coordenadas cartesianas 2D es una “exageración”, ya que una matriz 1D ya es capaz de almacenar tantos números como lo permita la computadora, mucho más de dos números necesarios para almacenar puntos en el sistema de coordenadas cartesianas.

Las matrices son bidimensionales y tienen un tamaño desconocido, el inicializador puede definir matrices de varios tamaños:

        var waypoints = new int[4][,]   {
                new int[,] { {1, 2, 6}, {3, 4, 5} }, // two rows, 3 columns
                new int[,] { {1, 1}, {1, 2} } , // 2 x 2
                new int[,] { {1, 5} }, // 1 x 2
                new int[,] { {6, 5} }
                };
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *