Cuando quieran encontrar
elementos en una lista de objetos pueden
usar ciclos, aunque es mejor utilizar los metodos búsqueda Find, FindAll, Exists e IndexOf.
Obtener el elemento con Find
En lugar de utilizar un
bucle foreach con un if , se puede utilizar el
método Find en la lista.
Devuelve el primer objeto
encontrado..
using System; using System.Collections.Generic; class Program { static void Main() { List<int> list = new List<int>(new int[] { 19, 23, 29 }); // Encuentra el primer elemento mayor a 20 int result = list.Find(item => item > 20); Console.WriteLine(result); // 23 } }
Descripción.
Este código recorre cada valor int en
la lista desde el principio y prueba cada valor para ver si es mayor a 20, y
devuelve el primer valor encontrado (en este caso el numero
23).
Un ejemplo mas completo:
Supongamos que tenemos la siguiente clase:
public
class Employee{ public
String EmpCode;
public String FirstName;
public String LastName; public DateTime DateOfBirth;
public String Department; public String Designation;
public String FirstName;
public String LastName; public DateTime DateOfBirth;
public String Department; public String Designation;
//Constructor
public Employee(String ecode, String fname, String lname, DateTime dob, String dept, String desg)
{
EmpCode = ecode;
FirstName = fname;
LastName = lname;
DateOfBirth = dob;
Department = dept;
Designation = desg;
}
}
public Employee(String ecode, String fname, String lname, DateTime dob, String dept, String desg)
{
EmpCode = ecode;
FirstName = fname;
LastName = lname;
DateOfBirth = dob;
Department = dept;
Designation = desg;
}
}
y tenemos una lista de objetos de tipo Employee...
public class
EmployeeList :
List<Employee>{ }
en la cual agregamos los siguientes empleados...
EmployeeList elist = new EmployeeList();
elist.Add(new
Employee("1","Ruben","Jacome",DateTime.Now,"Ingenieria de
Manufactura","Programador"));
elist.Add(new Employee("2","Alejandra","Cruz",DateTime.Now,"Desarrollo de Software","Programador"));
elist.Add(new Employee("3","Mario","Gonzalez",DateTime.Now,"PCL","Supervisor"));
elist.Add(new Employee("4","Bob","Meyer",DateTime.Now,"Divisional","Gerente"));
y ahora buscamos
a Bob...
Employee em =
elist.Find(delegate(Employee e) { return e.FirstName
== "Bob"; });
Ahora tendremos en em el
objeto Employee que tenga el FirstName = "Bob".
Nota sobre las
búsquedas hacia atras. Para buscar hacia
atrás, utilice el método FindLast, que volvería a 29 en el ejemplo
anterior. Analizará la lista desde el
último elemento hasta el primero.
Buscar por
otros métodos. También hay métodos
FindIndex y FindLastIndex que se pueden utilizar para
regresar el índice de los valores encontrados en la busqueda
Entendiendo FindAll
El método FindAll
devuelve una lista de objetos del mismo tipo con todos los elementos que
coinciden con la busqueda.
Utilizando Exists
El método Exists
devuelve true o false dependiendo de si cualquier
elemento coincide con el parámetro de busqueda.
using System; using System.Collections.Generic; class Program { static void Main() { List<int> list = new List<int>(); list.Add(7); list.Add(11); list.Add(13); // Busca si existen valores mayores a 10 bool exists = list.Exists(element => element > 10); Console.WriteLine(exists); // True // Busca por numeros menores a 7 exists = list.Exists(element => element < 7); Console.WriteLine(exists); // False } }
Descripción: En este ejemplo se prueba
primero para ver si algun elemento de la lista tiene un valor mayor a 10, el
cual regresa true. Despues, prueba por valores menores a 7, los cuales
regresan false.
Usando IndexOf
El método IndexOf
tiene dos sobrecargas. Acepta el valor
que desee encontrar como primer parámetro y, a continuación, devuelve la
ubicación del valor en un arreglo.
using System; using System.Collections.Generic; class Program { static void Main() { List<int> primes = new List<int>(new int[] { 19, 23, 29 }); int index = primes.IndexOf(23); // Existe en la lista Console.WriteLine(index); // 1 index = primes.IndexOf(10); // No existe en la lista Console.WriteLine(index); // -1 } }
NOTA. Cuando se utiliza IndexOf, siempre se debe
comprobar -1 o se generara una excepcion. Tenga en cuenta que también puede usar LastIndexOf para
realizar la búsqueda en el orden inverso.
Comentarios
Publicar un comentario