Anuncios

Bienvenidos sean a este post, hoy veremos un metodo para los arrays.

Anuncios

Este metodo nos permite convertir el tipo de un array en otro, pasemos a ver como es su sintaxis:

Array.ConvertAll(array_origen, conversor);
Anuncios

Es un metodo que se utilza directamente desde la clase Array, como argumentos debemos pasar dos elementos, el primero sera el array que sera de fuente u origen, lo siguiente sera el metodo de convertirlo, y este puede ser de dos formas:

  • Por medio de un Converter
  • Por medio de un operador Lambda
Anuncios

Para entenderlo mejor en ambos casos vamos a ver un par de ejemplos, primero haremos el caso con Converter y luego hablaremos del operador Lambda, para el primer caso vamos a crear un nuevo archivo que llamaremos convierte.cs y le agregaremos el siguiente codigo:

convierte.cs

using System;

public class Program
{
	static int Main()
	{
		int[] arreglo = {10,20,30,40};
		int total=0;
		string cadena="";

		String[] conv = Array.ConvertAll(arreglo,
				new Converter<int, String> (aCadena));

		for(int i=0; i < arreglo.Length; i++)
		{
			total += arreglo[i];
			cadena += conv[i];
		}

		Console.WriteLine("Total: " + total);
		Console.WriteLine("Cadena: " + cadena);

		return 0;
	}

	public static String aCadena(int entero)
	{
		return entero.ToString();
	}
}
Anuncios

Primero definimos tres variables, la primera sera el array con el cual vamos a trabajar, despues tenemos una variable de tipo int que usaremos mas adelante, lo mismo con la siguiente de tipo string, nuestra siguiente variable sera un array de tipo String que usaremos para almacenar el resultado del metodo ConvertAll, observen que pasamos el array y luego la funcion encargada de la conversion, vamos a verla en detalle:

new Converter<int, String> (aCadena)
Anuncios
Anuncios

Este es el metodo que hara la adaptacion para la conversion, observen que primero pasamos el tipo del array de origen, luego el tipo al cual convertiremos y por ultimo el metodo que hara la magia, debe ser una funcion si o si, si observan por fuera del Main se encuentra definido, en este caso es de tipo public y static para devolver un valor de tipo String, recibe como argumento un valor de tipo int y devolvemos el resultado de aplicar el ToString para convertirlo en ese tipo, no se preocupen el argumento siempre sera el array que usaremos de origen, se puede trabajar con mas argumentos pero no lo haremos mas complejo por el momento, con la funcion comentada y el metodo explicado ya tenemos la conversion realizada, pero como comprobamos que realmente funciono? aqui entra en accion el bucle siguiente donde pasaremos por todos los elementos de ambos array donde sumaremos cada uno de los elementos y los almacenaremos en cada una de las variables antets definidas, total y cadena, para finalmente mostrar el resultado de estas operaciones, compilemos y ejecutemos para ver la salida:

C:\Users\tinchicus>convierte.exe
Total: 100
Cadena: 10203040

C:\Users\tinchicus>
Anuncios

Observen que en el primer caso nos realizo la operacion porque sumo cada uno de los elementos entre si, en cambio en el segundo obtuvimos una concatenacion porque ahora son de tipo String y no tipo de int, ahora tambien podemos trabajarlo de la siguiente forma con el operador lambda:

using System;

public class Program
{
	static int Main()
	{
		int[] arreglo = {10,20,30,40};
		int total=0;
		string cadena="";

		String[] conv = Array.ConvertAll(arreglo,ele=>ele.ToString());

		for(int i=0; i < arreglo.Length; i++)
		{
			total += arreglo[i];
			cadena += conv[i];
		}

		Console.WriteLine("Total: " + total);
		Console.WriteLine("Cadena: " + cadena);

		return 0;
	}
}
Anuncios

Basicamente el codigo es exactamente el mismo pero las dos diferencias principales son la linea encargada de convertir el dato y ahora no tenemos la funcion para convertir a String, analicemos la linea de conversion:

String[] conv = Array.ConvertAll(arreglo,ele=>ele.ToString());
Anuncios

Observen que en este caso en lugar de usar a new Converter utilizamos una variable llamada ele (la cual representa los valores informados), el operador lambda (=>) seguido de una funcion que usaremos para procesar el valor del lado izquierdo, en este caso para convertirlo en String, puede parecer mas simple pero obviamente tiene mas restricciones con respecto al anterior pero si lo compilan y ejecutan obtendran exactamente el mismo resultado, por eso la forma de utilizarlo quedara al criterio de cada uno.

Anuncios
Nota:
Sobre el operador Lambda hablaremos en otro post.
Anuncios

En resumen, hoy hemos visto a ConvertAll, que es, para que sirve, como se utiliza en sus dos variantes, despues vimos el primer ejemplo donde usamos a Converter y luego el mismo codigo pero con el operador Lambda, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario