Beide Marc und dahlbyk Die Antworten der Kommission scheinen sehr gut zu funktionieren. Ich habe jedoch eine viel einfachere Lösung. Statt der Verwendung von Distinct
können Sie verwenden GroupBy
. Es geht folgendermaßen:
var listDistinct
= list.GroupBy(
i => i.value1,
(key, group) => group.First()
).ToArray();
Beachten Sie, dass ich zwei Funktionen an die GroupBy()
. Der erste ist ein Schlüsselselektor. Mit dem zweiten wird nur ein Element aus jeder Gruppe ausgewählt. Ihrer Frage entnehme ich, dass First()
war die richtige. Sie können eine andere schreiben, wenn Sie wollen. Sie können versuchen Last()
um zu sehen, was ich meine.
Ich habe einen Test mit der folgenden Eingabe durchgeführt:
var list = new [] {
new { value1 = "ABC", objT = 0 },
new { value1 = "ABC", objT = 1 },
new { value1 = "123", objT = 2 },
new { value1 = "123", objT = 3 },
new { value1 = "FOO", objT = 4 },
new { value1 = "BAR", objT = 5 },
new { value1 = "BAR", objT = 6 },
new { value1 = "BAR", objT = 7 },
new { value1 = "UGH", objT = 8 },
};
Das Ergebnis war:
//{ value1 = ABC, objT = 0 }
//{ value1 = 123, objT = 2 }
//{ value1 = FOO, objT = 4 }
//{ value1 = BAR, objT = 5 }
//{ value1 = UGH, objT = 8 }
Ich habe sie nicht auf ihre Leistung getestet. Ich glaube, dass diese Lösung wahrscheinlich ein wenig langsamer ist als eine, die Distinct
. Trotz dieses Nachteils gibt es zwei große Vorteile: Einfachheit und Flexibilität. Normalerweise ist es besser, die Einfachheit der Optimierung vorzuziehen, aber das hängt wirklich von dem Problem ab, das man zu lösen versucht.