Вы находитесь на странице: 1из 6

Tutorial

Este tutorial se divide en las siguientes secciones:

Matrices en general
Declarar matrices
Inicializar matrices
Acceso a miembros de matrices
Las matrices son objetos
Usar foreach con matrices

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 mayora de los lenguajes populares; existen, sin
embargo, algunas diferencias que se deben conocer.
Cuando se declara una matriz, los corchetes ([]) deben ir despus del tipo, no despus del
identificador. Colocar los corchetes despus del identificador no es sintcticamente vlido
en C#.
int[] table; // not int table[];

Otro detalle es que el tamao 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.
int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array

Declarar matrices
C# admite matrices de una dimensin, matrices multidimensionales (matrices
rectangulares) y matrices de matrices (matrices escalonadas). El siguiente ejemplo muestra
cmo declarar diferentes tipos de matrices:
Matrices unidimensionales:
int[] numbers;

Matrices multidimensionales:
string[,] names;

Matrices de matrices (escalonadas):

byte[][] scores;

La declaracin de matrices (como se muestra arriba) no crea realmente las matrices. En C#,
las matrices son objetos (se explica ms adelante en este tutorial) cuyas instancias deben
crearse. Los siguientes ejemplos muestran cmo crear matrices:
Matrices unidimensionales:
int[] numbers = new int[5];

Matrices multidimensionales:
string[,] names = new string[5,4];

Matrices de matrices (escalonadas):


byte[][] scores = new byte[5][];
for (int x = 0; x < scores.Length; x++)
{
scores[x] = new byte[4];
}

Tambin se pueden utilizar matrices ms grandes. Por ejemplo, se puede utilizar una matriz
rectangular de tres dimensiones:
int[,,] buttons = new int[4,5,3];

Incluso, se pueden combinar matrices rectangulares y escalonadas. Por ejemplo, el


siguiente cdigo declara una matriz unidimensional que contiene matrices tridimensionales
de matrices bidimensionales de tipo int:
int[][,,][,] numbers;

Ejemplo
El siguiente es un programa completo en C# que declara y crea instancias de las matrices
comentadas anteriormente.
// 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];
// Array-of-arrays (jagged array)

byte[][] scores = new byte[5][];


// Create the jagged array
for (int i = 0; i < scores.Length; i++)
{
scores[i] = new byte[i+3];
}
// Print length of each row
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("Length of row {0} is {1}", i,
scores[i].Length);
}
}
}

Resultado
Length
Length
Length
Length
Length

of
of
of
of
of

row
row
row
row
row

0
1
2
3
4

is
is
is
is
is

3
4
5
6
7

Inicializar matrices
C# proporciona mtodos simples y sencillos para inicializar matrices en el momento de la
declaracin encerrando los valores iniciales entre llaves ({}). Los siguientes ejemplos
muestran diferentes modos de inicializar diferentes tipos de matrices.
Nota Si no inicializa una matriz en el momento de la declaracin, sus miembros se
inicializan automticamente con el valor inicial predeterminado para el tipo de matriz.
Adems, si declara la matriz como campo de un tipo, se establecer con el valor
predeterminado null cuando cree la instancia del tipo.
Matrices unidimensionales
int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};

El tamao de la matriz se puede omitir, como se indica a continuacin:


int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};

Tambin se puede omitir el operador new si se utiliza un inicializador como el siguiente:


int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};

Matrices multidimensionales
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"}
};

El tamao de la matriz se puede omitir, como se indica a continuacin:


int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };

Tambin se puede omitir el operador new si se utiliza un inicializador como el siguiente:


int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };

Matriz escalonada (matriz de matrices)


Las matrices escalonadas se pueden inicializar como en el siguiente ejemplo:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9}
};

El tamao de la primera matriz se puede omitir, como se indica a continuacin:


int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9}
};

O bien
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

Observe que no existe sintaxis de inicializacin para los elementos de una matriz
escalonada.

Acceso a miembros de matrices


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 cdigo crea una matriz denominada numbers
y, a continuacin, asigna un 5 al quinto elemento de la matriz:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;

El siguiente cdigo 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 declaracin de una matriz escalonada de una sola dimensin 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}
};

La siguiente instruccin asigna 58 al primer elemento de la primera matriz y 667 al


segundo elemento de la segunda matriz:
numbers[0][0] = 58;
numbers[1][1] = 667;

Las matrices son objetos


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 sera utilizar la propiedad Length
para obtener la longitud de una matriz. El siguiente cdigo asigna la longitud de la matriz
numbers, que es 5, a una variable denominada LengthOfNumbers:
int[] numbers = {1, 2, 3, 4, 5};
int LengthOfNumbers = numbers.Length;

La clase System.Array proporciona muchos otros mtodos y propiedades tiles, como


mtodos para ordenar, buscar y copiar matrices.

Usar foreach con matrices


C# dispone de la instruccin foreach. Esta instruccin proporciona un modo simple y
limpio de iterar en los elementos de una matriz. Por ejemplo, el siguiente cdigo crea una
matriz denominada numbers y la recorre mediante la instruccin foreach:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers)
{
System.Console.WriteLine(i);
}

Con matrices multidimensionales, se puede utilizar el mismo mtodo 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
ms control sobre los elementos de la matriz.

Вам также может понравиться