Professional Documents
Culture Documents
Una matriz es una estructura de datos que contiene una serie de variables, a las que se obtiene
acceso a través de índices calculados. Las variables contenidas en una matriz, también conocidas
como elementos de la matriz, son todas del mismo tipo, denominado tipo de elemento de la
matriz.
Una matriz tiene un rango que determina el número de índices asociados a cada elemento de la
matriz. El rango de una matriz también se conoce como número de dimensiones de la matriz.
Una matriz con un rango de uno se denomina matriz unidimensional. Una matriz con un rango
mayor que uno se denomina matriz multidimensional. Las matrices multidimensionales de un
determinado tamaño se suelen denominar matrices bidimensionales, tridimensionales, etc.
Cada dimensión de una matriz tiene una longitud asociada, que es un número entero mayor o
igual a cero. Las longitudes de dimensión no forman parte del tipo de matriz, sino que se
establecen cuando se crea una instancia del tipo de matriz en tiempo de ejecución. La longitud de
una dimensión determina el intervalo válido de índices para esa dimensión: para una dimensión
de longitud N, los índices pueden tomar valores de cero a N – 1 inclusive. El número total de
elementos en una matriz es el producto de las longitudes de cada dimensión de la matriz. Si
alguna de las dimensiones de una matriz tiene una longitud cero, se dice que la matriz está vacía.
Los elementos de una matriz pueden ser de cualquier tipo, incluido un tipo de matriz.
array-type:
non-array-type rank-specifiers
non-array-type:
type
rank-specifiers:
rank-specifier
rank-specifiers rank-specifier
rank-specifier:
[ dim-separatorsopt ]
dim-separators:
,
dim-separators ,
El rango de un tipo de matriz viene dado por el especificador de rango (rank-specifier) situado en
el extremo izquierdo del tipo de matriz (array-type): así, un especificador de rango indica que la
matriz posee un rango de uno más el número de símbolos "," del especificador de rango.
El tipo de elemento de un tipo de matriz es el tipo resultante de eliminar el especificador de
rango rank-specifier del extremo izquierdo:
Un tipo de matriz de la forma T[R] es una matriz de rango R y un tipo de elemento que no
sea matriz T.
Un tipo de matriz de la forma T[R][R1]...[RN] es una matriz de rango R y un tipo de
elemento que no sea matriz T[R1]...[RN].
Lo que sucede es que los especificadores de rango rank-specifiers se leen de izquierda a derecha,
antes del tipo de elemento final que no es matriz. El tipo int[][,,][,] es una matriz
unidimensional que contiene matrices tridimensionales de matrices bidimensionales de tipo int.
En tiempo de ejecución, el valor de un tipo de matriz puede ser null o una referencia a una
instancia de dicho tipo.
Matrices en general
En las matrices de C#, los índices empiezan en cero. Las matrices de C# funcionan de forma
similar a como lo hacen en la mayoría de los lenguajes populares; existen, sin embargo, algunas
diferencias que se deben conocer.
Cuando se declara una matriz, los corchetes ([]) deben ir después del tipo, no después del
identificador. Colocar los corchetes después del identificador no es sintácticamente válido en C#.
Otro detalle es que el tamaño de la matriz no forma parte de su tipo, como ocurre en el lenguaje
C. Esto permite declarar una matriz y asignarle cualquier matriz de objetos int,
independientemente de la longitud de la matriz.
Declarar matrices
Matrices unidimensionales:
int[] numbers;
Matrices multidimensionales:
string[,] names;
byte[][] scores;
La declaración de matrices (como se muestra arriba) no crea realmente las matrices. En C#, las
matrices son objetos (se explica más adelante en este tutorial) cuyas instancias deben crearse.
Los siguientes ejemplos muestran cómo crear matrices:
Matrices unidimensionales:
Matrices multidimensionales:
También se pueden utilizar matrices más grandes. Por ejemplo, se puede utilizar una matriz
rectangular de tres dimensiones:
int[][,,][,] numbers;
Ejemplo
// arrays.cs
using System;
class DeclareArraysSample
{
public static void Main()
{
// Single-dimensional array
int[] numbers = new int[5];
// Multidimensional array
string[,] names = new string[5,4];
Resultado
Length of row 0 is 3
Length of row 1 is 4
Length of row 2 is 5
Length of row 3 is 6
Length of row 4 is 7
Inicializar matrices
Matrices unidimensionales
Matrices multidimensionales
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
O bien
Observe que no existe sintaxis de inicialización para los elementos de una matriz escalonada.
El acceso a los miembros de una matriz es sencillo y similar al de los miembros de una matriz de
C o C++. Por ejemplo, el siguiente código crea una matriz denominada numbers y, a
continuación, asigna un 5 al quinto elemento de la matriz:
El siguiente código declara una matriz multidimensional y asigna el valor 5 al miembro ubicado
en [1, 1]:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
La siguiente es una declaración de una matriz escalonada de una sola dimensión que contiene
dos elementos. El primer elemento es una matriz de dos enteros, mientras que el segundo es una
matriz de tres enteros:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}
};
numbers[0][0] = 58;
numbers[1][1] = 667;
En C#, las matrices son realmente objetos. System.Array es el tipo base abstracto de todos los
tipos de matrices. Las propiedades y otros miembros de la clase System.Array se pueden utilizar
cuando sea necesario. Un ejemplo de esto sería utilizar la propiedad Length para obtener la
longitud de una matriz. El siguiente código asigna la longitud de la matriz numbers, que es 5, a
una variable denominada LengthOfNumbers:
La clase System.Array proporciona muchos otros métodos y propiedades útiles, como métodos
para ordenar, buscar y copiar matrices.
Con matrices multidimensionales, se puede utilizar el mismo método para recorrer los elementos,
por ejemplo:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers)
{
Console.Write("{0} ", i);
}
El resultado de este ejemplo es:
9 99 3 33 5 55
Sin embargo, con matrices multidimensionales, utilizar un bucle for anidado proporciona más
control sobre los elementos de la matriz.
Colecciones C#
Las matrices son muy útiles para crear y trabajar con un número fijo de objetos fuertemente
tipados.
Las colecciones proporcionan un método más flexible para trabajar con grupos de objetos.
A diferencia de las matrices, el grupo de objetos con el que trabaja puede aumentar y reducirse
dinámicamente a medida que cambian las necesidades de la aplicación. Para algunas colecciones,
puede asignar una clave a cualquier objeto que incluya en la colección para que pueda recuperar
rápidamente el objeto con la clave asignada.
Una colección es una clase, de modo que antes de poder agregar elementos a una nueva
colección, debe declararla.
Si su colección se limita a elementos de solo un tipo de datos, puede utilizar una de las clases en
el espacio de nombres System.Collections.Generic. Una colección genérica cumple la seguridad
de tipos para que ningún otro tipo de datos se pueda agregar a ella. Cuando recupera un elemento
de una colección genérica, no tiene que determinar su tipo de datos ni convertirlo.