Anuncios

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

Anuncios

Este metodo nos sirve para encontrar varios elementos dentro de un array, veamos como es su sintaxis:

Array.FindAll(array, busqueda);
Anuncios

El metodo es muy similar a Find del cual hablamos en este post, y al igual que este tambien se llama a traves de la clase y como argumentos debemos pasar el array en cuestion y luego el patron de busqueda que al igual que ConvertAll debemos utilizar un programa o un operador Lambda, para entenderlo mejor vamos a realizar un ejemplo y para ello crearemos un archivo con el nombre buscar.cs y le agregaremos el siguiente codigo:

buscar.cs

using System;

public class Program
{
	static int Main()
	{
		string[] nombres = {"enzo","marta","javier","martin","raul"};
		for(int i=0; i < nombres.Length; i++)
			Console.WriteLine("pos #{0}: {1}", i, nombres[i]);

		string[] arr = Array.FindAll(nombres, buscar_nombre);

		for(int j=0; j < arr.Length; j++)
			Console.WriteLine("Nombre #{0}: {1}", j, arr[j]);

		return 0;
	}

	static bool buscar_nombre(string e)
	{
		return e.StartsWith("m", StringComparison.Ordinal);
	}
}
Anuncios
Anuncios

En este codigo primero definiremos un array con una serie de nombres, nuestro siguiene paso sera mostrarlos en pantalla, lo siguiente sera la definicion es otro array donde almacenaremos el resultado de aplicar al metodo FindAll, observen que pasamos el array y despues la funcion que usaremos para buscar el nombre, no es tan asi pero ya veremos porque, despues mostraremos el resultado almacenado en arr pero para ello debemos usar un bucle para pasar por todas las posibles coincidencias que nos devuelve el metodo, para ir finalizando hablemos sobre la funcion, en este caso sera de tipo bool, como argumento recibira al array, recuerden que esto es automatico porque se encarga el metodo de pasarlo, dentro de esta funcion devolveremos el resultado de aplicar el StartsWith al array, en este caso le pedimos que busque una palabra que comience con la letra m y a su vez le decimos que utilice la comparacion ordinal, a diferencia de Find no se detendra en la primer coincidencia sino que ira almacenando todas las coincidencias, con esto comentado pasemos a ver como es su salida:

C:\Users\tinchicus>buscar.exe
pos #0: enzo
pos #1: marta
pos #2: javier
pos #3: martin
pos #4: raul
Nombre #0: marta
Nombre #1: martin

C:\Users\tinchicus>
Anuncios

Observen como nos devolvio todos los nombres que comienzan con la letra que le indicamos, pero como dijimos este metodo tambien soporta el operador Lambda, para ello modifiquemos el codigo anterior de la siguiente manera:

using System;

public class Program
{
	static int Main()
	{
		string[] nombres = {"enzo","marta","javier","martin","raul"};
		for(int i=0; i < nombres.Length; i++)
			Console.WriteLine("pos #{0}: {1}", i, nombres[i]);

		string[] arr = Array.FindAll(nombres, e => e.StartsWith("m",
					StringComparison.Ordinal));

		for(int j=0; j < arr.Length; j++)
			Console.WriteLine("Nombre #{0}: {1}", j, arr[j]);

		return 0;
	}
}
Anuncios
Anuncios

Este codigo es muy similar al anterior pero con dos salvedades, ya no tenemos la funcion adicional y en lugar del llamado a esta usamos el operador lambda (=>), este pasara al array en e y despues lo usaremos con StartsWith tal como en el caso anterior y cuando coincida almacenara cada una de las coincidencias tal como vimos en el codigo anterior, despues el resto hace exactamente lo mismo que describimos aneriormente e inclusive obtendremos el mismo resultado pero con mucha mas facilidad en comparacion con el codigo anterior, pero tengan en cuenta que este es mas limitado que la funcion, asi que deberan ajustarse a las necesidades de donde lo esten utilizando.

Anuncios

En resumen, hoy hemos visto FindAll, que es, para que sirve, como se utiliza, vimos un ejemplo con las dos formas que se pueden usar para aplicar correctamente el metodo, espero les haya sido util 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

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario