domingo, 17 de febrero de 2013

Jagged Arrays en Java

Hola a todos!

¿Qué es un Jagged array?
Jagged significa mellado o dentado, así que más o menos su nombre indica que está incompleto o falta algo por especificar.

Cuando trabajamos con arrays multidimensionales, es muy corriente encontrarnos con el problema de que no todos los niveles del array tendrán las mismas dimensiones o simplemente inicialmente desconocemos las dimensiones de cada nivel.

Supongamos que queremos definir un array que guarde identificadores de fotogramas de diferentes animaciones, pero a priori desconocemos cuantos fotogramas tendrá cada animación.

int MAX_ANIMATIONS = 10;
int[][] animations = new int[MAX_ANIMATIONS][];

int[] framesAnim0 = {1, 2, 3, 4, 5};
int[] framesAnim1 = {6, 7, 8};
int[] framesAnim2 = {9, 10, 11, 12};

animations[0] = framesAnim0;
animations[1] = framesAnim1;
animations[2] = framesAnim2;


animations[][] es el jagged array, es inicializado con un máximo de 10 animaciones, y no especificamos cuántos fotogramas tendrá cada animación.
En caso de que hubiéramos especificado por ejemplo que cada animación tendrá 5 fotogramas, se habrían generado automáticamente 10 arrays con 5 ceros cada uno.

int[][] animations = new int[MAX_ANIMATIONS][5];

Después simplemente asignamos 3 arrays de animaciones a las 3 primeras posiciones del array animations.
En este caso las dimensiones de cada animación pasan a ser directamente las dimensiones de cada uno de los arrays de frames referenciados.

En el caso de que no disponemos de arrays previamente inicializados pero deseamos inicializar con distintas dimensiones cada uno de los niveles de un jagged array podemos hacerlo de la siguiente forma:

int MAX_ANIMATIONS = 4;
int[][] animations = new int[MAX_ANIMATIONS][];

animations[0] = new int[2];
animations[1] = new int[4];
animations[2] = new int[8];
animations[3] = new int[16];

Con este tipo de inicialización conseguiríamos un array que contiene los siguientes elementos:

animations[0] = {0,0};
animations[1] = {0,0,0,0};
animations[2] = {0,0,0,0,0,0,0,0};
animations[3] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Un saludo a todos!

No hay comentarios:

Publicar un comentario