Anuncios

Bienvenidos sean a este post, hoy veremos un metodo para el objeto List.

Anuncios

Este metodo nos permite remover todos los valores que coincidan con un criterio, veamos su sintaxis:

lista.RemoveAll(criterio);
Anuncios

El metodo se aplica directamente al objeto, el criterio que se utiliza como argumento puede ser tanto una funcion como un operador lambda pero de eso hablaremos luego, antes veamos un ejemplo y para ello crearemos un nuevo archivo con el nombre de remover.cs y le agregaremos el sigueinte codigo:

remover.cs

using System;
using System.Collections.Generic;

public class Program
{
	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.RemoveAll(remover);

		int i = 0;
		foreach(string n in nombres)
		{
			Console.WriteLine("Nombre #{0}: {1}", i, n);
			i++;
		}
	}

	static bool remover(string valor)
	{
		return valor.StartsWith("j");
	}
}
Anuncios
Anuncios

En este caso utilizaremos una funcion como criterio pero antes de ver el codigo en si analicemos la funcion que se usara para este fin, esta se llamara remover y el valor que recibe es enviado automaticamente por el metodo y en el bloque simplemente devolveremos un valor booleano el cual es el resultado del metodo StartsWith, con esto comentado sigamos con el codigo de nuestro Main y para ello definiremos un array con una serie de nombres y luego un objeto List llamado nombres que contendra los valores del array, nuesrto siguiente paso sera llamar a RemoveAll y como criterio pasaremos a la funcion remover, donde cada vez que devuelva un True procedera a remover el valor que enviamos a la funcion, por ultimo tenemos un segmento para mostrarnos como quedo la lista despues del metodo, la variable i esta simplemente para identificar el nombre en el literal, con todo esto comentado veamos como es su salida:

C:\Users\tinchicus>remover.exe
Nombre #0: tinchicus
Nombre #1: enzo
Nombre #2: ariel
Nombre #3: raul
Nombre #4: charly
Nombre #5: gustavo

C:\Users\tinchicus>
Anuncios

Como pueden ver funciono correctamente dado que nos removio los dos nombres que comenzaban con la letra j, esto es con un criterio en base a una funcion, tomemos ese codigo y modifiquemoslo para usar un operador lambda:

using System;
using System.Collections.Generic;

public class Program
{
	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.RemoveAll(c=>c.StartsWith("j"));

		int i = 0;
		foreach(string n in nombres)
		{
			Console.WriteLine("Nombre #{0}: {1}", i, n);
			i++;
		}
	}

}
Anuncios
Anuncios

Hablemos de las dos diferencias, la primera es la desaparacion de la funcion porque ya no es necesaria, la segunda es el operador lambda donde ahora tomara el valor enviado por el metodo y lo procesaremos con el mismo metodo que usabamos en el otro codigo, el resto es exactamente el mismo codigo y trabaja de la misma, por lo tanto si lo compilan y ejecutan deberan obtener el mismo resultado, este es mucho simple pero tambien es mas limitado que la funcion pero eso se debe ajustar a sus necesidades del momento pero existe una tercer alternativa, para ello debemos modificar el codigo de la siguiente manera:

using System;
using System.Collections.Generic;

public class Program
{
	static void Main()
	{
		string[] arr = {"tinchicus","enzo","ariel","javier","raul",
				"juan","charly","gustavo"};
		List<string> nombres = new List<string>(arr);

		nombres.RemoveAll(delegate(string dato)
		{
			return dato.StartsWith("j");
		});

		int i = 0;
		foreach(string n in nombres)
		{
			Console.WriteLine("Nombre #{0}: {1}", i, n);
			i++;
		}
	}

}
Anuncios

Este es mas un hibrido entre funcion y el operador lambda, porque delegate nos permite asociar una variable a una funcion o en este caso a un bloque de instrucciones, en este caso devolveremos el resultado del metodo StartWith pero aqui tendremos la posibilidad de poder agregar mas instrucciones para trabajar, a diferencia del operador lambda, y de vuelta lo mismo si lo compilan y ejecutan deberan obtener la misma salida.

Anuncios

En resumen, hoy hemos visto RemoveAll, que es, para que sirve, como se utiliza, un ejemplo donde pudimos ver en realidad las tres formas de pasar un criterio para que el metodo funcione correctamente, 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