6. Tablas
-
Upload
esteban-soraire -
Category
Documents
-
view
3.096 -
download
0
description
Transcript of 6. Tablas
Tablas
Descripción general
Introducción a las tablas
Creación de tablas
Uso de tablas
Introducción a las tablas
¿Qué es una tabla?
Notación para tablas en C#
Rango de una tabla
Acceso a los elementos de una tabla
Comprobación de los límites de una tabla
Comparación de tablas y colecciones
¿Qué es una tabla?
Una tabla es una secuencia de elementos
Todos los elementos de una tabla son del mismo tipo
Las estructuras pueden tener elementos de distintos tipos
Se accede a elementos individuales usando índices enteros
Índice entero 0(cero)
Índice entero 4(cuatro)
Notación para tablas en C#
Una variable de tabla se declara especificando:
El tipo de elementos de la tabla
El rango de la tabla
El nombre de la variable
Especifica el rango de la tabla
Especifica el nombre de la variable de tabla
Especifica el tipo de elementos de la tabla
tipo[ ] nombre;tipo[ ] nombre;
Rango de una tabla
El rango se conoce también como dimensión de la tabla
El número de índices asociados con cada elemento
Rango 1: UnidimensionalUn solo índice asociado con cada elemento long
Rango 2: BidimensionalDos índices asociados concada elemento int
long[ ] fila;long[ ] fila; int[,] cuadrícula;int[,] cuadrícula;
Acceso a los elementos de una tabla
Se indica un índice entero para cada rango
Los índices se cuentan a partir de cero
33332222
1111
long[ ] fila;...fila[3];
long[ ] fila;...fila[3];
int[,] cuadrícula;...cuadrícula[1,2];
int[,] cuadrícula;...cuadrícula[1,2];
Comprobación de los límites de una tabla
Se comprueban los límites cada vez que se intenta acceder a una tabla
Un índice erróneo lanza la excepción IndexOutOfRangeException
Se usan la propiedad Length y el método GetLength
filafila cuadrcuadr
fila.GetLength(0)==6fila.GetLength(0)==6
fila.Length==6fila.Length==6
cuadr.GetLength(0)==2cuadr.GetLength(0)==2
cuadr.GetLength(1)==4cuadr.GetLength(1)==4
cuadr.Length==2*4cuadr.Length==2*4
Comparación de tablas y colecciones
Una tabla no puede cambiar su tamaño cuando está llena Una clase de colección, como ArrayList, puede cambiar su
tamaño Una tabla contiene elementos de un solo tipo
Una colección está diseñada para contener elementos de distintos tipos
Los elementos de una tabla no pueden ser de sólo lectura Una colección puede tener acceso de sólo lectura
En general, las tablas son más rápidas pero menos flexibles Las colecciones son algo más lentas pero más flexibles
Creación de una tabla
Inicialización de los elementos de una tabla
Inicialización de los elementos de una tabla multidimensional
Creación de una tabla de tamaño calculado
Copia de variables de tabla
Creación de tablas
Creación de una tabla
¡Declarar una variable de tabla no es lo mismo que crear una tabla! Para crear la tabla explícitamente hay que usar new El valor implícito por defecto de los elementos de una
tabla es cero
fila
0 0 0 0
cuadrícula
0 0 00 0 0
Variable Tabla
long[ ] fila = new long[4];long[ ] fila = new long[4];
int[,] cuad = new int[2,3];int[,] cuad = new int[2,3];
Inicialización de los elementos de una tabla
Es posible inicializar explícitamente los elementos de una tabla
Se puede utilizar una expresión abreviada
fila
0 1 2 3
Equivalentes
long[ ] fila = new long[4] {0, 1, 2, 3};long[ ] fila = new long[4] {0, 1, 2, 3};
long[ ] fila = {0, 1, 2, 3};long[ ] fila = {0, 1, 2, 3};
Inicialización de los elementos de una tabla multidimensional
También se pueden inicializar los elementos de una tabla multidimensional
Hay que especificar todos los elementos
cuadrícula
5 4 32 1 0
Nueva tabla int[2,3] implícita
int[,] cuadr = {{5, 4, 3},{2, 1, 0}
};
int[,] cuadr = {{5, 4, 3},{2, 1, 0}
};
int[,] cuadr = {{5, 4, 3},{2, 1 }
};
int[,] cuadr = {{5, 4, 3},{2, 1 }
};
Creación de una tabla de tamaño calculado
No es necesario que el tamaño de una tabla sea una constante de tiempo de compilación Se puede usar cualquier expresión entera válida El acceso a los elementos es igualmente rápido en todos
los casos Tamaño de tabla especificado por constante
entera de tiempo de compilación:
Tamaño de tabla especificado por valor entero de tiempo de ejecución:
long[ ] fila = new long[4];long[ ] fila = new long[4];
string s = Console.ReadLine();int tamano = int.Parse(s);long[ ] fila = new long[tamano];
string s = Console.ReadLine();int tamano = int.Parse(s);long[ ] fila = new long[tamano];
Copia de variables de tablas
Al copiar una variable de tabla se copia sólo la variable de tabla
No se copia la tabla
Dos variables de tabla pueden apuntar a la misma tabla
copia
fila
0 0 0 0
Variable Tabla
long[ ] fila = new long[4];long[ ] copia = fila;...fila[0]++;long valor = copia[0];Console.WriteLine(valor);
long[ ] fila = new long[4];long[ ] copia = fila;...fila[0]++;long valor = copia[0];Console.WriteLine(valor);
Propiedades de tablas
Métodos de tablas
Devolución de tablas desde métodos
Paso de tablas como parámetros
Argumentos de línea de comandos
Demostración: Argumentos para Main
Uso de tablas con foreach
Problema: ¿Dónde está el error?
Uso de tablas
Propiedades de tablas
fila
0 0 0 0
cuadrícula
0 0 00 0 0
fila.Rankfila.Rank
fila.Lengthfila.Length
cuad.Rankcuad.Rank
cuad.Lengthcuad.Length
long[ ] fila = new long[4];long[ ] fila = new long[4];
int[,] cuad = new int[2,3];int[,] cuad = new int[2,3];2222
4444
1111
6666
Métodos de tablas
Métodos utilizados frecuentemente
Sort: Ordena los elementos en una tabla de rango 1
Clear: Asigna el valor cero o null a un rango de elementos
Clone: Crea una copia de la tabla
GetLength: Devuelve la longitud de una dimensión dada
IndexOf: Devuelve el índice de la primera vez que aparece un valor
Devolución de tablas desde métodos
Es posible declarar métodos para que devuelvan tablas
class Example { static void Main( ) { int[ ] array = CreateArray(42); ... } static int[ ] CreateArray(int tamano) { int[ ] creada = new int[tamano]; return creada; }}
class Example { static void Main( ) { int[ ] array = CreateArray(42); ... } static int[ ] CreateArray(int tamano) { int[ ] creada = new int[tamano]; return creada; }}
Paso de tablas como parámetros
Un parámetro de tabla es una copia de la variable de tabla
No es una copia de la tabla
class Example2 { static void Main( ) { int[ ] arg = {10, 9, 8, 7}; Method(arg); System.Console.WriteLine(arg[0]); } static void Metodo(int[ ] parametro) { parametro[0]++; }}
class Example2 { static void Main( ) { int[ ] arg = {10, 9, 8, 7}; Method(arg); System.Console.WriteLine(arg[0]); } static void Metodo(int[ ] parametro) { parametro[0]++; }}
Este método modificarála tabla original creada en Main
Este método modificarála tabla original creada en Main
Argumentos de línea de comandos
El runtime pasa argumentos de línea de comandos a Main
Main puede aceptar como parámetro una tabla de cadenas de caracteres
El nombre del programa no es un miembro de la tabla
class Example3 { static void Main(string[ ] args) { for (int i = 0; i < args.Length; i++) { System.Console.WriteLine(args[i]); } }}
class Example3 { static void Main(string[ ] args) { for (int i = 0; i < args.Length; i++) { System.Console.WriteLine(args[i]); } }}
Uso de tablas con foreach
La instrucción foreach simplifica enormemente la manipulación de tablas
class Example4 { static void Main(string[ ] args) { foreach (string arg in args) { System.Console.WriteLine(arg); } }}
class Example4 { static void Main(string[ ] args) { foreach (string arg in args) { System.Console.WriteLine(arg); } }}
Práctica – Creación y uso de tablas