Skip to main content

Apuntes - Colecciones

Matrices

Las matrices, también llamadas arrays, arreglos o vectores, son estructuras de datos que nos permiten almacenar múltiples variables del mismo tipo.

Características de las matrices

Dimensionalidad

Las matrices pueden ser unidimensionales, bidimensionales o multidimensionales.

Las matrices unidimensionales tienen una sola dimensión. Las matrices que tienen dos o más dimensiones son multidimensionales.

Tamaño fijo

La cantidad y el tamaño de las dimensiones son establecidos al momento de instanciar la matriz y no pueden ser cambiados. Si necesitamos alterar el tamaño de un array, tendremos que instanciar uno nuevo con distinta longitud y migrar los datos almacenados en el array original.

Indexación base-cero

Se puede acceder a los elementos de una matriz a través de un índice numérico entero. En el caso de las matrices con más de una dimensión será un sub-índice por dimensión, y se accederá a un elemento específico con una determinada combinación de los distintos sub-índices.

Se dice que las matrices tienen indexación de base-cero (zero indexed) porque sus elementos pueden ser accedidos a través de un índice numérico que comienza en el número cero y se incrementa de uno en uno.

Si tenemos un array con tamaño n, su primera posición se accederá con el índice 0 y la última con el índice n-1 (el tamaño menos uno).

Matrices Unidimensionales

Las matrices son objetos cuya instancia debe ser creada. Utilizaremos el operador new para crear la instancia especificando el tipo de elemento de la matriz y el número de elementos.

Instanciar

int[] array = new int[5];

En el ejemplo anterior declaramos una matriz de 5 enteros. Los elementos de la matriz se inicializan con el valor predeterminado del tipo de elemento, 0 para enteros.

Pueden almacenar cualquier tipo de elemento que se especifique.

string[] arrayString = new string[6];

Inicializar

Es posible inicializar los elementos de una matriz cuando se declara. En este caso no es necesario especificar la longitud porque se infiere por el número de elementos en la lista de inicialización.

int[] a = new int[] { 1, 3, 5, 7, 9 };

Esta matriz contiene los elementos desde el índice a[0] hasta a[4].

Matriz unidimensional

Se puede omitir el operador new y el tipo cuando se inicializa una matriz tras la declaración.

int[] array2 = { 1, 3, 5, 7, 9 };

Matrices multidimensionales

Las matrices pueden tener más de una dimensión.

Instanciar

Creamos una matriz bidimensional de tres filas y cinco columnas.

int[,] array = new int[3, 2];

Matriz multidimensional

Las matrices tridimensionales son análogas a un cubo Rubik.

int[,,] array1 = new int[4, 2, 3];

Inicializar

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

//se accede a los elementos por indice

Console.WriteLine(array[2, 1]);
// La salida del ejemplo es:
// 6

Inicialización de una matriz de tres dimensiones:

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

Matrices Escalonadas

Una matriz escalonada (jagged array) es una matriz cuyos elementos son matrices, posiblemente de diferentes tamaños. También se denomina "matriz de matrices".

Instanciar

int[][] jaggedArray = new int[3][];

Inicializar

Antes de poder usar la matriz escalonada, sus elementos deben inicializarse. Se puede inicializar los elementos de esta manera:

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

Cada uno de los elementos es una matriz unidimensional de números enteros. El primer elemento es una matriz de 5 enteros, el segundo es una matriz de 4 enteros y el tercero es una matriz de 2 enteros.

También es posible inicializar los elementos de la matriz con valores, en cuyo caso no necesita el tamaño de la matriz. Por ejemplo:

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };

Es posible combinar matrices escalonadas y multidimensionales:

int[][,] jaggedArray = new int[3][,]

jaggedArray[0] = new int[] { {1,3}, {5,7} };
jaggedArray[1] = new int[] { {0,2}, {4,6}, {8,10} };
jaggedArray[2] = new int[] { {11,22}, {99,88}, {0,9} };

// Puedemos acceder a elementos individuales
System.Console.Write("{0}", jaggedArray[0][1, 0]);

//La salida de este ejemplo es:
// 5

La propiedad Length devuelve el número de matrices contenidas en la matriz escalonada. Si tomamos como ejemplo la matriz anterior jaggedArray.Length devuelve el valor 3.