2009-07-30 7 views
3

J'utilise C# + VSTS2008 + .Net 3.0. J'ai une entrée en tant que tableau de chaînes. Et j'ai besoin de sortir les chaînes uniques du tableau. Des idées pour la mettre en œuvre efficacement?Comment obtenir des valeurs uniques d'une collection en C#?

Par exemple, j'ai des entrées {"abc", "abcd", "abcd"}, la sortie que je veux être est {"abc", "abcd"}.

+0

Le titre de la question est un peu trompeur. Il devrait probablement être "Comment obtenir une collection unique en C#". – angularsen

Répondre

19

LINQ:

var uniquevalues = list.Distinct(); 

Cela vous donne une IEnumerable<string>.

Si vous voulez un tableau:

string[] uniquevalues = list.Distinct().ToArray(); 

Si vous ne l'utilisez .NET 3.5, il est un peu plus compliqué:

List<string> newList = new List<string>(); 

foreach (string s in list) 
{ 
    if (!newList.Contains(s)) 
     newList.Add(s); 
} 

// newList contains the unique values 

Une autre solution (peut-être un peu plus vite) :

Dictionary<string,bool> dic = new Dictionary<string,bool>(); 

foreach (string s in list) 
{ 
    dic[s] = true; 
} 

List<string> newList = new List<string>(dic.Keys); 

// newList contains the unique values 
+0

Désolé, j'ai tort. J'utilise. Net 3.0, ne peut pas utiliser LINQ, des solutions? – George2

+0

Merci Philippe, j'aime ta réponse! – George2

9

Une autre option sur est d'utiliser un HashSet:

HashSet<string> hash = new HashSet<string>(inputStrings); 

Je pense que je voudrais aussi aller avec LINQ, mais il est aussi une option.

Edit: Vous avez
mettre à jour la question 3.0, peut-être cela vous aidera: Using HashSet in C# 2.0, compatible with 3.5

+0

Merci Kobi, j'aime aussi ta réponse! – George2

+0

Pas de problème. Il était évident que vous accepteriez la réponse de Philippe (c'est mieux), mais c'est toujours bon d'avoir plus d'options. – Kobi

2

Vous pouvez aller avec Linq son court et doux, mais dans le cas où u ne veux pas essayer LINQ deuxième option HashSet

Option 1:

string []x = new string[]{"abc", "abcd", "abcd"};  
IEnumerable<string> y = x.Distinct();  
x = Enumerable.ToArray(y); 

Option 2:

HashSet<string> ss = new HashSet<string>(x); 
x = Enumerable.ToArray(ss); 
Questions connexes