web-dev-qa-db-fra.com

Obtenir des objets 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 un List<string> qui contient éventuellement plusieurs éléments répétés et ne souhaite que les valeurs uniques figurant dans la liste.

87
domgreen

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 
137
Vinay Sajip

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();
130
LukeH

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

6
aku

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;
}
6
Murilo Beltrame

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.

4
Noldorin