Quel est le moyen le plus rapide/le plus efficace d’obtenir tous les éléments distincts d’une liste?
J'ai un List<string>
qui contient éventuellement plusieurs éléments répétés et ne souhaite que les valeurs uniques figurant dans la liste.
Utiliser un HashSet<T>
. Par exemple:
var items = "A B A D A C".Split(' ');
var unique_items = new HashSet<string>(items);
foreach (string s in unique_items)
Console.WriteLine(s);
empreintes
A B D C
Vous pouvez utiliser la méthode Distinct
pour renvoyer un IEnumerable<T>
d'éléments distincts:
var uniqueItems = yourList.Distinct();
Et si vous avez besoin de la séquence d'éléments uniques renvoyée sous la forme d'un List<T>
, vous pouvez ajouter un appel à ToList
:
var uniqueItemsList = yourList.Distinct().ToList();
Vous pouvez utiliser la méthode d'extension Distinct de LINQ
En .Net 2.0, je suis assez sûr de cette solution:
public IEnumerable<T> Distinct<T>(IEnumerable<T> source)
{
List<T> uniques = new List<T>();
foreach (T item in source)
{
if (!uniques.Contains(item)) uniques.Add(item);
}
return uniques;
}
Outre la méthode d’extension Distinct
de LINQ, vous pouvez utiliser un HashSet<T>
objet que vous initialisez avec votre collection. Ceci est probablement plus efficace que le mode LINQ, car il utilise des codes de hachage (GetHashCode
) plutôt qu’un IEqualityComparer
).
En fait, si cela convient à votre situation, je voudrais simplement utiliser un HashSet
pour stocker les éléments en premier lieu.