Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010


(Nota: Estás viendo una versión del curso antigua, creada en 2009. Es recomendable que sigas la versión 2015, mucho más actualizada, con contenidos más detallados, más ejemplos y más ejercicios propuestos)

4.2. Tablas bidimensionales

Podemos declarar tablas de dos o más dimensiones. Por ejemplo, si queremos guardar datos de dos grupos de alumnos, cada uno de los cuales tiene 20 alumnos, tenemos dos opciones:

En cualquier caso, si queremos indicar valores iniciales, lo haremos entre llaves, igual que si fuera una tabla de una única dimensión.

Vamos a ver un primer ejemplo del uso con arrays de la forma [2,20], lo que podríamos llamar el "estilo Pascal", en el usemos tanto arrays con valores prefijados, como arrays para los que reservemos espacio con "new" y a los que demos valores más tarde:

/*---------------------------*/
/*  Ejemplo en C# nº 37:     */
/*  ejemplo37.cs             */
/*                           */
/*  Array de dos dimensiones */
/*  al estilo Pascal         */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo37
{
  public static void Main()
  {
    int[,] notas1 = new int[2,2]; // 2 bloques de 2 datos
    notas1[0,0] = 1; 
    notas1[0,1] = 2; 
    notas1[1,0] = 3; 
    notas1[1,1] = 4;
 
    int[,] notas2 = // 2 bloques de 10 datos
    { 
      {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
      {11, 12, 13, 14, 15, 16, 17, 18, 19, 20} 
    };
 
    Console.WriteLine("La nota1 del segundo alumno del grupo 1 es {0}",
      notas1[0,1]);
    Console.WriteLine("La nota2 del tercer alumno del grupo 1 es {0}",
      notas2[0,2]);  
  }
}
 

Este tipo de tablas de varias dimensiones son las que se usan también para guardar matrices, cuando se trata de resolver problemas matemáticos más complejos que los que hemos visto hasta ahora.

La otra forma de tener arrays multidimensionales son los "arrays de arrays", que, como ya hemos comentado, y como veremos en este ejemplo, pueden tener elementos de distinto tamaño. En ese caso nos puede interesar saber su longitud, para lo que podemos usar "a.Length":

/*---------------------------*/
/*  Ejemplo en C# nº 38:     */
/*  ejemplo38.cs             */
/*                           */
/*  Array de dos dimensiones */
/*  al estilo C... o casi    */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo38
{
  public static void Main()
  {
 
    int[][] notas;         // Array de dos dimensiones
    notas = new int[3][];  // Seran 3 bloques de datos
    notas[0] = new int[10];  // 10 notas en un grupo
    notas[1] = new int[15];  // 15 notas en otro grupo
    notas[2] = new int[12];  // 12 notas en el ultimo
 
    // Damos valores de ejemplo
    for (int i=0;i<notas.Length;i++)
    {
      for (int j=0;j<notas[i].Length;j++)
      {
        notas[i][j] = i + j;
      }
    }
 
    // Y mostramos esos valores
    for (int i=0;i<notas.Length;i++)
    {
      for (int j=0;j<notas[i].Length;j++)
      {
        Console.Write(" {0}", notas[i][j]);
      }
      Console.WriteLine();
    }
 
  }
}
 

La salida de este programa sería

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 4 5 6 7 8 9 10 11 12 13

Ejercicios propuestos: