| Recherche dans des listes grâce aux délégués ( C#) |
.NET Le .NET des ptits patelins
Le quotidien d'un développeur consiste le plus souvent à trouver l'information dont il a besoin et de l'utiliser de façon intelligente, et j'ai remarqué une petite chose lorsque je regarde des exemples de code sur le net,c'est que pas mal de gens ne savent pas utiliser ce que j'appellerais "'une des plus grande invention du langage" : la recherche dans les collections d'élément via des délégués.
Qu'est-ce que sont les délégués ?
Un petit exemple rapide:
Une classe Personne avec des attributs Nom, Prenom.
Une liste contenant des personnes serait du genre :
List<Personne> listePersonne = new List<Personne>();
///Nouvelles personnes
Personne p1 = new Personne("Duran", "Paul");
Personne p2 = new Personne("Dupont", "Paul");
listePersonne.Add(p1);
listePersonne.Add(p2);
Pour rechercher une personne contenu dans la liste, une grande partie des personnes fait avec la méthode old-school:
Ce code marche, mais en C#, il existe la méthode Find :Personne perso;
for (int i = 0; i < listePersonne.Count; i++)
{
if (listePersonne[i].Nom == "Duran")
{
perso = listePersonne[i];
}
}
///Recherche d'une personne
Personne perso = listePersonne.Find(delegate(Personne p) { return p.Nom == "Duran"; });
///Recherche de plusieurs personnes
List<Personne> lperso = listePersonne.FindAll(delegate(Personne p) { return p.Nom == "Paul"; });
Ça fait exactement la même chose (à part que find renvoie la première occurrence trouvée alors que le code avec le for renvoie la dernière occurrence)
De nombreuses méthodes utilisent les délégués (Find, FindAll...) C'est très utile et c'est surtout beaucoup plus propre dans le code. Je suppose que du coté des performances, c'est la même chose, un gain de rapidité grâce au Find, à confirmer toutefois.







































Commentaires
Le genre de petits truc qui m'aide bien quand le net reste muet! Merci PP :p
Merci beaucoup pour ce tuto il m'a énormément aidé.
C'est bien expliqué
C'est court (très bien)
Et tout y est pour pouvoir utiliser des classes dans les listes.
De rien c'est fait pour :)
En relisant le truc, j'ai vu que j'avais fait une petite faute sur le findAll, la logique voudrait qu'on recherche avec l'attribut "Prenom" et non l'attribut "Nom". Mais c'est la méthode qui compte !
Propre, net et efficace.
Un tout grand merci pour cette aide.
Merci beaucoup, j'ai recherché ça partout sans jamais rien trouver!
c'est très clair et très utile.
merci, juste une question, est ce que find nous retourne le premier élément qui contient la chaine ou bien c'est aléatoire?
merci
Non, il s'agit toujours du premier élément de la liste!
Génial, exactement ce qu'il me fallait! J'étais parti dans un truc sans fin, mais là, en une ligne c'est bouclé.
Hop, favoris!
Bonjour. Enfin un exemple clair ! Je cherche, moi, à connaître l'index correspondant à l'occurence d'un élément donné, dans une List. Je me dis que "FindIndex" devrait faire l'affaire, le problème c'est la syntaxe..... Merci si tu as une idée aussi clair que pour le "Find"
Et bien tu remplaces simplement Find par FindIndex, la syntaxe est exactement la même!