domingo, 17 de septiembre de 2017

La Clase Array en C# - Parte 3/3

Índice

1. Introducción
2. Palabras Clave
3. Inversión de Elementos
4. Copiar Elementos
5. Conversión
6. Redimensionamiento
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta última parte de la serie de artículos Clase Array en C#, describe cuatro operaciones adicionales que el programador puede realizar con un objeto de la clase Array: invertir, copiar, convertir y redimensionar un arreglo. Para ello será necesario explorar métodos como: Reverse, Clone, CopyTo, Copy y ConvertAll.

2. Palabras Clave

  • Arreglo
  • Copiar
  • Conversión
  • Redimensionamiento

3. Inversión de Elementos

Encontramos en la clase Array las versiones sobrecargadas del método Reverse para invertir el orden de los elementos integrales (Albahari, 2012):
  • void Reverse (Array array): esta versión toma un objeto Array e invierte todos los elementos del arreglo.
  • void Reverse (Array array, int index, int length): con esta versión se invierte sólo una porción de los elementos del arreglo pasado como argumento.
Ambas versiones son static.

Un ejemplo de uso podría ser:

Array tresMaestros = Array.CreateInstance(typeOf(string), 3);
tresMaestros.SetValue("Balzac", 0);
tresMaestros.SetValue("Dickens", 1);
tresMaestros.SetValue("Dostoevski", 2);

Al imprimir los elementos del arreglo tresElementos se mostrará: Balzac, Dickens y Dostoevski. Luego al invocar el método static Reverse:

Array.Reverse(tresMaestros);

el contenido del arreglo será: Dostoevski, Dickens y Balzac.

4. Copiar Elementos

Los métodos Clone, CopyTo, Copy y ConstrainedCopy de la clase Array copian los elementos de un arreglo en modo shallow (La Clase Array en C# - Parte 1/3).
  • Clone: Crea una copia de todo el contenido del arreglo.
  • Copy, CopyTo: Crea una copia de un subconjunto de los elementos de un arreglo.
  • ContrainedCopy: Copia los elementos de un arreglo comprobando que no existan errores durante el proceso. Si algo sale mal, la copia se suspende y los cambios se deshacen.

5. Conversión

Para convertir el tipo de dato de los elementos de un arreglo, C# proporciona el método ConvertAll ("Array.ConvertAll", 2017). Este método recibe como argumento el arreglo a convertir, y un delegado que lleva a cabo la conversión en concreto.

Ejemplo de uso:

double[] constantes = {3.14159, 2.71828, 0.57721}
int[] valoresEnteros = Array.ConvertAll (reals, v => Convert.ToInt32(v));

6. Redimensionamiento

El método Array.Resize ("Array.Resize(T)", 2017) crea un nuevo arreglo en el que se copian los elementos de un arreglo fuente; además se espeficia el tamaño del nuevo arreglo por medio de argumento int. La instancia retornada mantiene las mismas referencias de los elementos del arreglo fuente; es decir que se llama a cabo un copiado tipo shallow.

7. Conclusiones

Se describieron los métodos para invertir, copiar, convertir y redimensionar arreglos de la clase Array. Tener conocimiento conceptual de estos elementos de programa nos permitirá escribir aplicaciones que hagan uso de operaciones optimizadas que provee .NET Framework a través de los lenguajes de programación compatibles.

8. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.
Array.Reverse Method (System) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.array.reverse(v=vs.110).aspx
La Clase Array en C# - Parte 1/3 (2017). Recuperado desde: https://ortizol.blogspot.com.co/2017/09/la-clase-array-en-csharp-parte-1-3.html
Array.ConstrainedCopy Method (Array, Int32, Array, Int32, Int32) (System) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.array.constrainedcopy(v=vs.110).aspx
Array.ConvertAll(TInput, TOutput) Method (TInput[], Converter(TInput, TOutput)) (System) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/exc45z53(v=vs.110).aspx
Array.Resize(T) Method (T[], Int32) (System) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/bb348051(v=vs.110).aspx


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.