Trouver l'index d'un élément dans une liste en C#
Cet article explique comment trouver l'index d'un élément dans une liste dans C#.
La solution doit soit renvoyer l'index de la première occurrence de l'élément requis, soit -1 s'il n'est pas présent dans la liste.
1. Utilisation List<T>.IndexOf()
méthode
La solution recommandée est d'utiliser le List<T>.IndexOf() méthode, qui renvoie l'indice de la première occurrence de l'élément spécifié dans cette liste, ou -1
s'il n'y a pas un tel élément.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; public class Example { public static void Main() { List<int> list = new List<int>() {3, 5, 2, 7, 6}; int item = 5; int index = list.IndexOf(item); if (index != -1) { Console.WriteLine(String.Format("Element {0} is found at index {1}", item, index)); } else { Console.WriteLine("Element not found in the given list."); } } } /* Résultat: Element 5 is found at index 1 */ |
2. Utilisation List<T>.FindIndex()
méthode
La solution recommandée est d'utiliser le List<T>.FindIndex() méthode qui renvoie l'index de la première occurrence de l'élément spécifié qui correspond aux conditions définies par un prédicat spécifié. Cette méthode renvoie -1 si un élément qui correspond aux conditions n'est pas trouvé.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; public class Example { public static void Main() { List<int> list = new List<int>() {3, 5, 2, 7, 6}; int item = 5; int index = list.FindIndex(a => a == item); if (index != -1) { Console.WriteLine(String.Format("Element {0} is found at index {1}", item, index)); } else { Console.WriteLine("Element not found in the given list."); } } } /* Résultat: Element 5 is found at index 1 */ |
3. Utilisation Enumerable.Select()
méthode (System.Linq
)
L'exemple de code suivant montre comment nous pouvons utiliser Enumerable.Select pour projeter sur une séquence de valeurs et utiliser à la fois la valeur et l'index de chaque élément pour trouver l'index de la première occurrence de l'élément spécifié dans cette liste.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Linq; using System.Collections.Generic; public class Example { public static void Main() { List<int> list = new List<int>() {3, 5, 2, 7, 6}; int item = 5; try { int index = list.Select((elem, index) => new {elem, index}) .First(p => p.elem == item) .index; Console.WriteLine(String.Format("Element {0} is found at index {1}", item, index)); } catch (InvalidOperationException) { Console.WriteLine("Element not found in the given list."); } } } /* Résultat: Element 5 is found at index 1 */ |
Nous pouvons éviter le bloc try-catch en utilisant FirstOrDefault()
méthode au lieu de First()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Linq; using System.Collections.Generic; public class Example { public static void Main() { List<int> list = new List<int>() {3, 5, 2, 7, 6}; int item = 5; int index = list.Select((element, index) => new {element, index}) .FirstOrDefault(x => x.element.Equals(item)) ?. index ?? -1; if (index != -1) { Console.WriteLine(String.Format("Element {0} is found at index {1}", item, index)); } else { Console.WriteLine("Element not found in the given list."); } } } /* Résultat: Element 5 is found at index 1 */ |
4. Effectuer une recherche linéaire
Une solution naïve consiste à effectuer une recherche linéaire sur la liste donnée pour déterminer si l'élément cible est présent dans la liste.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using System; using System.Collections.Generic; public static class Extensions { public static int FindIndex<T>(this List<T> list, T item) { EqualityComparer<T> comparer = EqualityComparer<T>.Default; for (int i = 0; i < list.Count; i++) { if (comparer.Equals(list[i], item)) { return i; } } return -1; } } public class Example { public static void Main() { List<int> list = new List<int>() {3, 5, 2, 7, 6}; int item = 5; int index = list.FindIndex(item); if (index != -1) { Console.WriteLine(String.Format("Element {0} is found at index {1}", item, index)); } else { Console.WriteLine("Element not found in the given list."); } } } /* Résultat: Element 5 is found at index 1 */ |
Il s'agit de trouver l'index d'un élément dans une liste en C#.