SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: princ_jan en Lunes 25 de Agosto de 2008, 02:27

Título: Busqueda en Lista
Publicado por: princ_jan en Lunes 25 de Agosto de 2008, 02:27
Hola, Alguien me podría dar una mano en lo sig.
como se utiliza el método findIndex
lista.FindIndex(Predicate<string>match)
Título: Re: Busqueda en Lista
Publicado por: Mollense en Lunes 25 de Agosto de 2008, 03:44
Cita de: "princ_jan"
Hola, Alguien me podría dar una mano en lo sig.
como se utiliza el método findIndex
lista.FindIndex(Predicate<string>match)
Acá está explicado y hay ejemplos (http://msdn.microsoft.com/en-us/library/x1xzf2ca.aspx)
Título: Re: Busqueda en Lista
Publicado por: princ_jan en Martes 26 de Agosto de 2008, 04:01
el código del ejemplo es el sig.
Código: Text
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Example
  5. {
  6.     public static void Main()
  7.     {
  8.         List<string> dinosaurs = new List<string>();
  9.  
  10.         dinosaurs.Add("Compsognathus");
  11.         dinosaurs.Add("Amargasaurus");
  12.         dinosaurs.Add("Oviraptor");
  13.         dinosaurs.Add("Velociraptor");
  14.         dinosaurs.Add("Deinonychus");
  15.         dinosaurs.Add("Dilophosaurus");
  16.         dinosaurs.Add("Gallimimus");
  17.         dinosaurs.Add("Triceratops");
  18.  
  19.         Console.WriteLine();
  20.         foreach (string dinosaur in dinosaurs)
  21.         {
  22.             Console.WriteLine(dinosaur);
  23.         }
  24.  
  25.         Console.WriteLine("nFindIndex(EndsWithSaurus): {0}",
  26.             dinosaurs.FindIndex(EndsWithSaurus));
  27.  
  28.         Console.WriteLine("nFindIndex(2, EndsWithSaurus): {0}",
  29.             dinosaurs.FindIndex(2, EndsWithSaurus));
  30.  
  31.         Console.WriteLine("nFindIndex(2, 3, EndsWithSaurus): {0}",
  32.             dinosaurs.FindIndex(2, 3, EndsWithSaurus));
  33.         Console.ReadLine();
  34.     }
  35.  
  36.     // Search predicate returns true if a string ends in "saurus".
  37.     private static bool EndsWithSaurus(String s)
  38.     {
  39.         if ((s.Length > 5) &&
  40.             (s.Substring(s.Length - 6).ToLower() == "saurus"))
  41.         {
  42.             return true;
  43.         }
  44.         else
  45.         {
  46.             return false;
  47.         }
  48.     }
  49. }
  50.  
  51. /* This code example produces the following output:
  52.  
  53. Compsognathus
  54. Amargasaurus
  55. Oviraptor
  56. Velociraptor
  57. Deinonychus
  58. Dilophosaurus
  59. Gallimimus
  60. Triceratops
  61.  
  62. FindIndex(EndsWithSaurus): 1
  63.  
  64. FindIndex(2, EndsWithSaurus): 5
  65.  
  66. FindIndex(2, 3, EndsWithSaurus): -1
  67.  */
  68.  

pero no entiendo bien como funciona el findindex, la verdad es que recien comienzo con esto y necesito un pequeño empujón con eso
Título: Re: Busqueda en Lista
Publicado por: princ_jan en Jueves 28 de Agosto de 2008, 18:38
alguien me puede explicar sobre los parametros del findindex????
Título: Re: Busqueda en Lista
Publicado por: ProfesorX en Jueves 28 de Agosto de 2008, 20:10
Es sencillo, el parametro predicate es una funcion que TU defines y en la que debes devolver true cuando se cumple la condicion que quieras, y false si no se cumple. Entonces el metodo FindIndex te devuelve el indice de la lista que cumple con esa condicion.

En el ejemplo que te dio mollense y que publicas, FindIndex utiliza una funcion que definiste, en esta caso llamada EndsWithSaurus, que devuelve true si la cadena que insertaste termina con "saurus" y false si no termina con "saurus".

Entonces la primera corrida te regresa como indice 1, porque de acuerdo al ejemplo, es la segunda cadena de la lista (Amargasaurus) la que termina con "saurus", y los indices comienzan con cero, entonces el primer elemento tiene indice 0, el segundo indice 1 y asi sucesivamente.

Si quieres cambiar la condicion, por ejemplo, que encuente el indice de la lista de todos los "pedros" tendrias que definir una funcion llamada BuscaPedro() que regrese true si encuentra a pedro en la cadena, y false si no encuentra a pedro en la cadena, y pasarsela como parametro a FindIndex.