ich habe eine Liste in die viele verschiendene Int-Werte geschrieben werden. Nun soll diese Liste am "Ende" maximal ein Element von jedem möglichen Int-Wert enthalten.
int[] Zahlen = { 1,2,1,1 }; foreach (var z in Zahlen.Distinct()) { Console.WriteLine(z); } //Ergebnis: //=> 1 //=> 2
//Alternative Schreibweise in Linq-Syntax im Select-Form-Style: // Weitere Details dazu siehe Antwort von "ChristophSebastian" var result = (from i in Zahlen select i).Distinct(); foreach (var z in result) { Console.WriteLine(z); }
Ich hab es mit einem Distinct gelöst. Alternativ könntest du auch ein GroupBy verwenden:
int[] numbers = { 1,2,1,1 }; var numberGroups = from n in numbers group n by n into g select new { Remainder = g.Key, Numbers = g };
foreach (var g in numberGroups) { foreach (var n in g.Numbers) { Console.WriteLine(n); } } //Ergebnis: //=> 1 //=> 2
Weitere Beispiele zu Distinct und GroupBy sowie aller weiteren Linq-Construkte findest du in der MSDN unter 101 LINQ Samples.
Hab dein Teil der Antwort die sich auf Distinct beziehen um die Schreibweise im Select-From-Style erweitert und um einen Verweis auf "ChristophSebastian" Post ergänzt.
Neben den von Floyd erwähnten Möglichkeiten (Distinct- und GroupBy-Erweiterungsmethoden) gibt es noch eine schnellere Möglichkeit die mit HashSets-arbeitet. Das ganze lohnt sich aber nur wenn es umfangreiche Daten vorhanden sind.
Die Abfrage mit Linq gibt ein Ergebnis vom Typ IEnumerable<T> zurück, welches eine Erweiterung namens "Distinct()" aufweist. Diese sorgt für eindeutige Werte im Ergebnis. Diese Schreibweise macht aber nur Sinn, wenn z.B. where-Kriterien angegeben werden. Ansonsten ist Floyd's Methodenschreibweise die passendere.
Hier eine Abfrage mit eindeutigen Werten im Ergebnis - jedoch ohne where-Kriterium:
Werte von IntList: 1,3,2,2,4,3,5,1
var result = (from i in IntList select i).Distinct();
Werte von result: 1,3,2,4,5
Das Ergebnis ist unsortiert, aber enthält nur eindeutige Werte.
Distinct ist eine Erweiterungsmethode und gehört zu LINQ. LINQ muss nicht unbedingt in der "Abfragesyntax" wie in deinem Beispiel verwendet werden. Es kann auch die "Methodensyntax" verwendet werden.
Da hast du wohl recht. Bei LINQ dachte ich nur an die Abfragesyntax und ging davon aus, dass 4king möglicherweise noch mehr in die Abfrage packen wollte, da er speziell nach einer LINQ-Lösung gefragt hat.