2010-07-02 21 views
5

Ich habe eine Liste von Zeichenfolgen in C# und möchten eine Liste von eindeutigen Zeichen, die in den Strings in der Liste sind, mit LINQ erstellen.LINQ in C# zum Konvertieren einer Liste <string> in eine Liste <char>

Ich habe bis jetzt ausgearbeitet, wie man die Liste in eine Liste umwandelt, aber ich kann nicht herausfinden, wie man den LINQ dazu bringt, weiter zu gehen.

Was ich habe, so weit ist wie folgt:

List<string> dictionary = new List<string>(someArray); 
List<string[]> uniqueCharacters = dictionary.ConvertAll(s => s.Split()); 

Ich glaube, ich brauche, um etwas entlang der Linien von

List<char> uniqueCharacters = 
    dictionary.ConvertAll(s => s.Split()).SelectAll(t, i=>t[i][0]); 

Antwort

15

können Sie LINQ verwenden Select Methode, zB:

var list = new List<string> { "Foo", "Bar" }; 

var chars = list.SelectMany(s => s.ToCharArray()); 
var distinct = chars.Distinct(); 
+0

Liste uniqueCharacters = dictionary.SelectMany (s => s.ToCharArray()). Distinct(). ToList(); ist, was ich ging am Ende - danke :) – simonalexander2005

+0

Mit einem 'HashSet' am Ende' var distinct = neue HashSet (Zeichen) 'ist eine andere sinnvolle Alternative, wenn die Frage liberaler interpretiert wird. Siehe auch http://stackoverflow.com/questions/1388361/getting-all-unique-items-in-ac-list –

+0

Der 'ToCharArray'-Aufruf ist unnötig und wirkt sich nur geringfügig auf die Leistung aus, da die Zeichen kopiert werden müssen die Quellzeichenfolge zu einem neuen Array. Sie können stattdessen 'list.SelectMany (s => s)' verwenden. – LukeH

1

Erhalten Sie Ihr Ergebnis LinQ und steckte es in Schleife, zu vergleichen, jedes char mit in Liste von Char.

foreach (string character in dictionary) 
     { 
      if (!(uniqueCharacters).Contains(character)) 
      { 
       uniqueCharacters.Add(character); 
      } 
     } 
+0

Gute Antwort, aber ich hatte gehofft, in der Lage sein alles in LinQ zu tun - nur für die Lernerfahrung, wenn nichts anderes – simonalexander2005

+1

Sein Wie ein SQL-Befehl DISTINCT Schreiben Sie Ihre LinQ-Abfrage, und fügen Sie Distinct() zuletzt –

Verwandte Themen