2009-07-30 20 views
3

Ich verwende C# + VSTS2008 + .Net 3.0. Ich habe eine Eingabe als String-Array. Und ich muss die eindeutigen Zeichenfolgen des Arrays ausgeben. Irgendwelche Ideen wie man das effizient umsetzt?Wie erhalten Sie eindeutige Werte aus einer Sammlung in C#?

Zum Beispiel habe ich Eingabe {"abc", "abcd", "abcd"}, die Ausgabe, die ich sein möchte, ist {"abc", "abcd"}.

+0

Der Titel der Frage ist ein wenig irreführend. Es sollte wahrscheinlich "Wie bekomme ich eine einzigartige Sammlung in C#". – angularsen

Antwort

19

Mit LINQ:

var uniquevalues = list.Distinct(); 

, dass Sie ein IEnumerable<string> gibt.

Wenn Sie ein Array:

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

Wenn Sie nicht .NET 3.5 verwenden, es ist ein wenig komplizierter:

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

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

// newList contains the unique values 

Eine andere Lösung (vielleicht ein wenig schneller) :

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

Sorry, ich liege falsch. Ich verwende .Net 3.0, kann LINQ, keine Lösungen verwenden? – George2

+0

Danke Philippe, ich mag deine Antwort! – George2

9

Weitere opti on ist ein HashSet zu verwenden: Ich würde auch mit Linq gehen

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

denke ich, aber es ist auch eine Option.

Edit:
Sie haben die Frage zu 3.0 aktualisieren, vielleicht wird dies dazu beitragen: Using HashSet in C# 2.0, compatible with 3.5

+0

Danke Kobi, ich mag deine Antwort auch! – George2

+0

Kein Problem. Es war offensichtlich, dass du Philippes Antwort nehmen wirst (es ist besser), aber es ist immer gut, mehr Optionen zu haben. – Kobi

2

Sie mit Linq seiner kurzen und süßen gehen können, aber für den Fall, u will nicht LINQ zweite Option HashSet versuchen

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); 
Verwandte Themen