Matrices (C# y Java)

Actualización: noviembre 2007

Las matrices son colecciones ordenadas de elementos del mismo tipo de datos a los que se tiene acceso utilizando el nombre de la matriz junto con el desplazamiento del elemento deseado desde el inicio de la matriz. Hay algunas diferencias importantes entre C# y Java en lo referente a cómo se declaran y utilizan las matrices.

Matriz unidimensional

Una matriz unidimensional almacena un número fijo de elementos en modo lineal, lo que requiere sólo un valor de índice único para identificar cualquier elemento. En C#, los corchetes de la declaración de matriz deben seguir al tipo de datos y no se pueden colocar después del nombre de variable, como se permite en Java. Así, una matriz de tipo integers se declara mediante la siguiente sintaxis:

int[] arr1;

La siguiente declaración no es válida en C#:

//int arr2[];  //compile error

Una vez que se declara una matriz, se utiliza la palabra clave new para establecer su tamaño, como en Java. En el ejemplo siguiente se declara la referencia de la matriz:

int[] arr;
arr = new int[5];  // create a 5 element integer array

A continuación, se tiene acceso a los elementos de una matriz unidimensional mediante una sintaxis idéntica a la de Java. Los índices de matriz de C# también se basan en cero. La sintaxis siguiente obtiene acceso al último elemento de la matriz anterior:

System.Console.WriteLine(arr[4]);  // access the 5th element

Inicialización

Los elementos de la matriz de C# se pueden inicializar en el momento de su creación mediante la misma sintaxis que Java:

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

A diferencia de Java, el número de inicializadores de C# debe coincidir exactamente con el tamaño de la matriz. Puede utilizar esta característica para declarar e inicializar una matriz de C# en una sola línea:

int[] arr1Line = {1, 2, 3, 4, 5};

Esta sintaxis crea una matriz de tamaño igual al número de inicializadores.

Inicializar en un bucle del programa

La otra manera de inicializar una matriz en C# es utilizar el bucle for. El siguiente bucle establece cada elemento de una matriz en cero:

int[] TaxRates = new int[5];

for (int i=0; i<TaxRates.Length; i++)
{
    TaxRates[i] = 0;
}

Matrices escalonadas

Tanto C# como Java admiten la creación de matrices escalonadas o no rectangulares, en las que cada fila contiene un número diferente de columnas. Por ejemplo, la siguiente matriz escalonada tiene cuatro entradas en la primera fila y tres en la segunda:

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

Matrices multidimensionales

Con C#, se pueden crear matrices multidimensionales normales que son como una matriz de valores del mismo tipo. Mientras Java y C# admiten matrices escalonadas, C# también admite matrices multidimensionales o matrices de matrices.

Declare una matriz rectangular multidimensional mediante la siguiente sintaxis:

int[,] arr2D;      // declare the array reference
float[,,,] arr4D;  // declare the array reference

Una vez declarada, asigne memoria a la matriz del modo siguiente:

arr2D = new int[5,4];  // allocate space for 5 x 4 integers

A continuación, se tiene acceso a los elementos de la matriz con la sintaxis siguiente:

arr2D[4,3] = 906;

Dado que las matrices se basan en cero, esta línea establece el elemento de la quinta columna de la cuarta fila en 906.

Inicialización

Se pueden crear, configurar e inicializar matrices multidimensionales en una instrucción única a través de uno de los métodos siguientes:

int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,]   { {1,2,3}, {4,5,6} };
int[,] arr6 =               { {1,2,3}, {4,5,6} };

Inicializar en un bucle del programa

Todos los elementos de una matriz se pueden inicializar con un bucle anidado, tal como se muestra aquí:

int[,] arr7 = new int[5,4];

for(int i=0; i<5; i++)
{
    for(int j=0; i<4; j++)
    {
        arr7[i,j] = 0;  // initialize each element to zero
    }
}

La clase System.Array

En .NET Framework, las matrices se implementan como instancias de la clase Array. Esta clase proporciona varios métodos útiles, como Sort y Reverse.

En el ejemplo siguiente se muestra lo fácil que es trabajar con estos métodos. En primer lugar, se invierten los elementos de una matriz mediante el método Reverse y, a continuación, se ordenan con el método Sort:

class ArrayMethods
{
    static void Main()
    {
        // Create a string array of size 5:
        string[] employeeNames = new string[5];

        // Read 5 employee names from user:
        System.Console.WriteLine("Enter five employee names:");
        for(int i=0; i<employeeNames.Length; i++)
        {
            employeeNames[i]= System.Console.ReadLine();
        }

        // Print the array in original order:
        System.Console.WriteLine("\nArray in Original Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Reverse the array:
        System.Array.Reverse(employeeNames);

        // Print the array in reverse order:
        System.Console.WriteLine("\n\nArray in Reverse Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Sort the array:
        System.Array.Sort(employeeNames);

        //  Print the array in sorted order:
        System.Console.WriteLine("\n\nArray in Sorted Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }
    }
}

Resultados

Enter five employee names:

Luca

Angie

Brian

Kent

Beatriz

Array in Original Order:

Luca Angie Brian Kent Beatriz

Array in Reverse Order:

Beatriz Kent Brian Angie Luca

Array in Sorted Order:

Angie Beatriz Brian Kent Luca

Vea también

Conceptos

Guía de programación de C#

Referencia

Matrices (Guía de programación de C#)

Otros recursos

Lenguaje de programación C# para desarrolladores de Java