92 votes

Obtenir des éléments uniques d'une liste

Quel est le moyen le plus rapide / le plus efficace d'obtenir tous les éléments distincts d'une liste ?

J'ai une List qui contient peut-être plusieurs éléments répétés et je veux seulement les valeurs uniques dans la liste.

146voto

Vinay Sajip Points 41286

Utilisez un HashSet. Par exemple :

var items = "A B A D A C".Split(' ');
var unique_items = new HashSet(items);
foreach (string s in unique_items)
    Console.WriteLine(s);

imprime

A
B
D
C

140voto

LukeH Points 110965

Vous pouvez utiliser la méthode Distinct pour renvoyer un IEnumerable d'éléments distincts:

var uniqueItems = yourList.Distinct();

Et si vous avez besoin que la séquence d'éléments uniques soit renvoyée sous forme de List, vous pouvez ajouter un appel à ToList:

var uniqueItemsList = yourList.Distinct().ToList();

6voto

aku Points 54867

Vous pouvez utiliser la méthode d'extension Distinct de LINQ

6voto

Murilo Beltrame Points 59

En .Net 2.0 je suis assez sûr de cette solution :

public IEnumerable Distinct(IEnumerable source)
{
     List uniques = new List();
     foreach (T item in source)
     {
         if (!uniques.Contains(item)) uniques.Add(item);
     }
     return uniques;
}

4voto

Noldorin Points 67794

En dehors de la méthode d'extension Distinct de LINQ, vous pourriez utiliser un objet HashSet que vous initialisez avec votre collection. C'est très probablement plus efficace que la méthode LINQ, car elle utilise des codes de hachage (GetHashCode) plutôt qu'un IEqualityComparer).

En fait, si c'est approprié pour votre situation, je recommande simplement d'utiliser un HashSet pour stocker les éléments en premier lieu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X