| 

.NET C# Java Javascript Exception

3
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.

Also: { 1,2,1,1} -> {1,2}

Das ganze in Linq ;)
05.10.2009
4king 63 3
3 Antworten
4
Hier ist der Code den du suchst:
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.
05.10.2009
Floyd 11,0k 3 9
Floyd 11,0k 3 9
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.
Floyd 05.10.2009
3
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.

BTW: Du Suchfunktion liefert auch eine Antwort auf dieses Frage:

Aus einer Liste Duplikate entfernen ohne die Reihenfolge zu ändern
05.10.2009
gfoidl 9,1k 3 5
2
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.
05.10.2009
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.

Kurz gesagt: Es funktioniert mit LINQ alleine ;)
gfoidl 05.10.2009
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.
ChristophSebastian 05.10.2009

Stelle deine .net-Frage jetzt!