2013-08-21 3 views
3

J'ai une liste C# de piqûre qui peut être x rangs longs. un petit exemple sera montré ci-dessous. Je voudrais savoir comment je voudrais maintenant comment je peux obtenir une petite liste distincte de sorte que A n'apparaisse pas plusieurs fois. cette liste arrive pour le code. donc c'est aléatoire.Faire une liste liste distincte d'une liste

list = {a,b,a,f,a,null,a,e,a,e} 
+0

Qu'en est-il des autres caractères tels que 'e'? Voulez-vous que ce soit aussi unique? –

+0

De même, 'a' est-il le même que' A'? Vous mentionnez majuscule A dans le texte mais votre liste contient des lettres minuscules. Mentionné un moyen d'ignorer l'affaire dans [ma réponse] (http://stackoverflow.com/a/18355752/284240). Btw, avec 'Distinct' ça fonctionne de la même façon:' Distinct (StringComparer.OrdinalIgnoreCase); ' –

Répondre

8

Essayez LINQ .... Pour être plus précis ... Étant donné que votre liste est en fait string [] vous pouvez faire ...

string[] list = {"a","b","a","f","a",null,"a","e","a","e"}; 
var distinctList = list.Distinct(); 

foreach (var str in distinctList)//Distinct list of values 
{ 
    Console.Write(str); 
} 
+2

_" liste est en fait une chaîne [] "_ Il n'a pas besoin d'être un tableau,' Distinct' fonctionne avec tous les types ' IEnumerable '. En dehors de cela, puisque 'Enumerable.Distinct' est implémenté en utilisant l'exécution différée, ce n'est en fait pas un' distinctList'. C'est juste la requête qui est exécutée sur un 'foreach' ou d'autres méthodes qui la matérialisent (f.e.' ToList'). Donc, vous devriez mentionner que puisque OP veut avoir une "liste ** distincte **". Sinon, vous exécuterez toujours cette requête qui est inefficace si les valeurs ne changent pas de toute façon. –

1

Vous pouvez également utiliser un HashSet<T>:

var set = new HashSet<string>(list); 

Si vous voulez remplacer votre ancienne liste avec la liste unique:

list = set.ToList(); 

HashSet<T> a beaucoup de useful and efficient methods qui sont souvent négligés.

La classe HashSet<T> offre des performances élevées. Un ensemble est une collection qui ne contient aucun élément dupliqué et dont les éléments ne sont pas dans un ordre particulier.

Mise à jour« afin que A ne semble pas le temps multiple »

Étant donné que la liste contient des minuscules a je suppose que vous ne savez pas que .NET compare sensible à la casse par défaut . Vous pouvez comparer insensible à la casse de cette façon:

var set = new HashSet<string>(list, StringComparer.OrdinalIgnoreCase); 
0

il suffit d'utiliser le mot-clé distinct() comme ceci:

List<string> foo = new List<string> {"a","b","a","f", "a", null,"a" ,"e","a","e"}; 
foreach (var element in foo.Distinct()) 
{ 
    element.Dump(); 
} 

Sortie:

a 
b 
f 
null 
e 

Ce qui est écrit dans LINQPad. La méthode Dump ne sera pas disponible pour vous