Pregunta ¿Son los atributos x, y y fila, col hacia atrás de una matriz bidimensional?


si pienso en el plano de coordenadas x, y x, y es la notación común para un par ordenado, pero si uso una matriz de dos dígitos tengo myArray [row] [col] y row es y y col es la x . ¿Eso está al revés o solo lo estoy pensando mal? Estaba pensando que se vería como myArray [x] [y], pero eso es incorrecto si quiero filas y columnas reales (como en un tablero de juego). ¿No sería myArray [y] [x] imitar de verdad una columna de columnas? ?


32
2018-02-04 21:54


origen


Respuestas:


Lo tienes bien, y se siente un poco al revés. el número de fila es una coordenada y, y el número de columna es una coordenada x, y sin embargo usualmente escribimos fila, col pero también usualmente escribimos x, y.

Si desea escribir su matriz como [y] [x] depende o [x] [y] depende principalmente de cuánto le importa realmente el diseño en la memoria (y si lo hace, qué idioma usa). y si desea escribir funciones / métodos que puedan operar en filas o columnas de forma aislada.

Si está escribiendo código C / C ++, las matrices se almacenan en Orden importante de la fila lo que significa que una sola fila de datos se puede tratar como una matriz de 1 dimensión. Pero una sola columna de datos no puede. Si no recuerdo mal, VB utiliza el orden principal de la columna, por lo que los idiomas varían. Me sorprendería que C # no sea también el orden principal de la fila, pero no lo sé.


27
2018-02-04 22:07



No importa cómo almacene sus datos en la matriz ([x] [y] o [y] [x]). Lo que sí importa es que siempre recorras el conjunto de forma contigua. Una matriz bidimensional de Java es esencialmente una matriz unidimensional que almacena la segunda matriz (por ejemplo, en el caso de [y] [x] tiene una matriz larga de [y] en la que cada y contiene las matrices [x] correspondientes para esa línea de y).

Para ejecutar de manera eficiente todo el conjunto, es importante acceder a los datos de manera que no tenga que realizar búsquedas continuamente en ese conjunto, saltando de un conjunto-y-de-xarrays a otro conjunto-y-de- xarrays. Lo que quiere hacer es acceder a un elemento y acceder a todas las x allí antes de pasar al siguiente elemento y.

Entonces en una situación de Array [y] [x]. siempre tiene la primera variable en el bucle externo y la segunda en el bucle interno:

for (int ys = 0; ys < Array[y].length; ys++)
    for (int xs = 0; xs < Array[y][x].length; xs++)
    {
        do  your stuff here
    }

Y, por supuesto, asignar previamente ambas Array.lengths fuera del ciclo para evitar tener que obtener esos valores en cada ciclo.


4
2018-06-29 19:45



En realidad, depende de usted. No hay derecho a pensar en tu pregunta. Por ejemplo, normalmente pienso en una matriz de una dimensión como una fila de celda. Entonces, en mi opinión, es array [col] [row]. Pero depende de ti ...


0
2018-02-04 21:59



Apuesto a que hay muchas opiniones diferentes sobre esta. En pocas palabras, en realidad no importa mientras seas consecuente. Si tiene otras bibliotecas o similares que van a utilizar los mismos datos, podría tener sentido hacer lo que sea necesario para una integración más fácil.

Si esto es estrictamente en su propio código, haga lo que le parezca cómodo. Mi preferencia personal sería usar myArray [y] [x]. Si son grandes, puede haber beneficios de rendimiento de mantener los artículos a los que va a acceder mucho al mismo tiempo. Pero no me preocuparía hasta más tarde en una etapa muy avanzada.


0
2018-02-04 22:01



Bueno, en realidad no, si piensas en una fila como elementos en el eje x y luego una matriz 2d es un grupo de elementos de fila en el eje y, entonces es normal usar y para operar en una fila, como ya sabes la x (para esa fila particular x es siempre la misma, es y que está cambiando con sus índices) y luego usa x para operar en los múltiples elementos de fila (las filas se apilan verticalmente, cada una en un valor y particular)


0
2017-10-25 12:36