Matrices multidimensionales en Objective-C

El lenguaje de programación Objective-C permite matrices multidimensionales. Aquí está la forma general de una declaración de matriz multidimensional:

type name[size1][size2]...[sizeN];

Por ejemplo, la siguiente declaración crea una matriz tridimensional de enteros 5, 10, 4:

int threedim[5][10][4];

Matrices bidimensionales

La forma más simple de la matriz multidimensional es la matriz bidimensional. Una matriz bidimensional es, en esencia, una lista de matrices unidimensionales. Para declarar una matriz de enteros bidimensionales de tamaño x, y, escribiría algo como sigue:

type arrayName [ x ][ y ];

Dónde type puede ser cualquier tipo de datos Objective-C válido y arrayNameserá un identificador Objective-C válido. Una matriz bidimensional se puede pensar como una tabla, que tendrá x número de filas y y número de columnas. Una matriz bidimensionala, que contiene tres filas y cuatro columnas, se puede mostrar a continuación:

Por tanto, cada elemento de la matriz a se identifica mediante un nombre de elemento de la forma a[ i ][ j ], donde a es el nombre de la matriz e i y j son los subíndices que identifican de forma única cada elemento en a.

Inicialización de matrices bidimensionales

Las matrices multidimensionales se pueden inicializar especificando valores entre corchetes para cada fila. A continuación se muestra una matriz con 3 filas y cada fila tiene 4 columnas.

int a[3][4] = {  
   {0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
   {4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
   {8, 9, 10, 11}   /*  initializers for row indexed by 2 */
};

Las llaves anidadas, que indican la fila deseada, son opcionales. La siguiente inicialización es equivalente al ejemplo anterior:

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

Acceso a elementos de matriz bidimensionales

Se accede a un elemento en una matriz bidimensional utilizando los subíndices, es decir, el índice de fila y el índice de columna de la matriz. Por ejemplo

int val = a[2][3];

La declaración anterior tomará el cuarto elemento de la tercera fila de la matriz. Puedes verificarlo en el diagrama anterior. Veamos el programa a continuación donde hemos usado un bucle anidado para manejar una matriz bidimensional:

#import <Foundation/Foundation.h>
 
int main () {
   
   /* an array with 5 rows and 2 columns*/
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
   int i, j;
 
   /* output each array element's value */
   for ( i = 0; i < 5; i++ ) {
      for ( j = 0; j < 2; j++ ) {
         NSLog(@"a[%d][%d] = %d\n", i,j, a[i][j] );
      }
   }
   
   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

2013-09-14 01:28:20.458 demo[32018] a[0][0] = 0
2013-09-14 01:28:20.458 demo[32018] a[0][1] = 0
2013-09-14 01:28:20.458 demo[32018] a[1][0] = 1
2013-09-14 01:28:20.458 demo[32018] a[1][1] = 2
2013-09-14 01:28:20.458 demo[32018] a[2][0] = 2
2013-09-14 01:28:20.458 demo[32018] a[2][1] = 4
2013-09-14 01:28:20.458 demo[32018] a[3][0] = 3
2013-09-14 01:28:20.458 demo[32018] a[3][1] = 6
2013-09-14 01:28:20.458 demo[32018] a[4][0] = 4
2013-09-14 01:28:20.458 demo[32018] a[4][1] = 8

Como se explicó anteriormente, puede tener matrices con cualquier número de dimensiones, aunque es probable que la mayoría de las matrices que cree sean de una o dos dimensiones.