Datapayasadas

julio 11, 2008

Realizando búsquedas simples sobre colecciones

Filed under: C# — Etiquetas: , , — Matías @ 11:18 pm

Buenas,

Hoy voy a contarles un poquito como realizar búsquedas sencillas sobre colecciones genéricas en C#.

Imaginemos que tenemos una clase con la siguiente estructura:

public class Usuario
{
    public string Nombre;
    public string Apellido;
    public int IdUsuario;
}

Ahora, podríamos tener una lista con varias instancias de esa clase, llamemosla usuarios:

List<Usuario> usuarios = new List<Usuario>();

Hasta acá nada loco … entonces, si quisiéramos buscar alguna instancia en particular sobre esa lista, como por ejemplo, el usuario cuyo nombre es Matías podríamos hacer algo así:

Usuario usuario = usuarios.Find(delegate(Usuario u) { return u.Nombre == "Matías"; });

Sencillo, ¿no?

El método Find nos devolvería la primera instancia de entre todos los elementos de la colección que cumpla la condición. ¿Cuál es la condición?: la que le pasamos en el predicado. En este último estamos especificando que recorra la colección de objetos de la clase Usuario, y que referencie como “u” a la instancia actual, es decir, donde se encuentra parado en ese momento.
Luego se verifica que la variable Nombre sea equivalente a Matías, esto devolverá un true o false, y finalmente, si la condición se cumple, entonces finaliza el método devolviendo la instancia actual. Si se recorrió toda la colección sin haber cumplido la condición, entonces se devolverá null.

Bien, ahora supongamos que no solo nos interesa obtener la primer ocurrencia que cumple la condición, sino todas aquellas que lo hagan. Ejemplo: queremos encontrar a todos los usuarios de apellido Perez.

Para ello tenemos el método FindAll, funciona básicamente igual que el anterior, pero en vez de devolver una simple instancia, devuelve una colección:

List<Usuario> sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.Apellido == "Perez"; });

Otro ejemplo: deseamos la lista de todos los usuarios cuyo Id sea menor de 100.

List sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.IdUsuario < 100; });[/sourcecode] Como verán es una forma sencilla y elegante para realizar búsquedas sobre colecciones en C#. Si desean más información sobre estos métodos pueden ir a la página del Microsoft Development Network, mas precisamente en los siguientes enlaces: para el Find y para el FindAll.

Bueno, esto fue “Realizando búsquedas simples sobre colecciones” para Nintendo 64, y espero que le haya gustado. Chau.
LOL

— M

Anuncios

4 comentarios »

  1. Ahora esta mucho mejor usar LINQ para buscar dentro de las colecciones.

    Comentario por Eduardo — noviembre 4, 2008 @ 4:16 pm

  2. @Eduardo que tal? gracias por dejarnos un comentario!!

    Te comento que si bien LINQ te da muchisima facilidad a la hora de hacer consultas sobre colecciones, cuando se trata de hacer consultas a una base de datos el rendimiento cae estrepitosamente! Hace poco fui a una charla de SQL Server 2008 en el CodeCamp que se realizó en Bs. As. y realmente no recomendaban el uso de LINQ para aplicaciones empresariales o que hacían uso intensivo de la base de datos…

    Saludos!

    Comentario por Pablo — noviembre 4, 2008 @ 4:21 pm

  3. Puras mentiras, típico de aca.
    Por supuesto que hay que tener cuidado con las sentencias que genera, pero en general son sentencias comun y corrientes que son tan veloces como las armadas a mano con ADO.

    Comentario por Eduardo — noviembre 4, 2008 @ 4:33 pm

  4. @Eduardo no creo que sean mentiras viniendo de gente del MUG… en el Code Camp la mayoría de los disertantes trabajaban en empresas que usan e investigan estas tecnologías a diario y no creo que lo hayan dicho porque si. Creo que LINQ tiene potencial pero le falta mucho por delante.

    Cuando me libere un poco de los exámenes voy a hacer yo mismo un benchmark para ver diferencias.

    Saludos!

    Comentario por Pablo — noviembre 4, 2008 @ 4:59 pm


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: