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:
- Podemos usar int datosAlumnos[40] y entonces debemos recordar que los 20 primeros datos corresponden realmente a un grupo de alumnos y los 20 siguientes a otro grupo. Es "demasiado artesanal", así que no daremos más detalles.
- O bien podemos emplear int datosAlumnos[2,20] y entonces sabemos que los datos de la forma datosAlumnos[0,i] son los del primer grupo, y los datosAlumnos[1,i] son los del segundo.
- Una alternativa, que puede sonar más familiar a quien ya haya programado en C es emplear int datosAlumnos[2][20] pero en C# esto no tiene exactamente el mismo significado que [2,20], sino que se trata de dos arrays, cuyos elementos a su vez son arrays de 20 elementos. De hecho, podrían ser incluso dos arrays de distinto tamaño, como veremos en el segundo ejemplo.
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:
- Un programa que al usuario dos bloques de 10 números enteros (usando un array de dos dimensiones). Después deberá mostrar el mayor dato que se ha introducido en cada uno de ellos.
- Un programa que al usuario dos bloques de 6 cadenas de texto. Después pedirá al usuario una nueva cadena y comprobará si aparece en alguno de los dos bloques de información anteriores.