DistinctBy, aber das letzte Element jeder Gruppe von Duplikaten bleibt erhaltenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 DistinctBy, aber das letzte Element jeder Gruppe von Duplikaten bleibt erhalten

Post by Anonymous »

Ich habe eine Liste mit Elementen, die Duplikate enthält, und ich möchte das letzte Element jeder Gruppe von Duplikaten behalten. Der native DistinctBy LINQ-Operator behält das erste Element aus jeder Gruppe, sodass mein Problem dadurch nicht gelöst wird. Ich habe versucht, einen benutzerdefinierten DistinctLastBy-Operator wie diesen zu implementieren:

Code: Select all

public static IEnumerable DistinctLastBy(
this IEnumerable source,
Func keySelector,
IEqualityComparer comparer = default)
{
ArgumentNullException.ThrowIfNull(source);
ArgumentNullException.ThrowIfNull(keySelector);
return source
.GroupBy(keySelector, comparer)
.Select(g => g.Last());
}
...aber es funktioniert nicht richtig. Es gibt zwar das letzte Element jeder Gruppe zurück, die Elemente befinden sich jedoch nicht in derselben Reihenfolge wie in der Quellsequenz. Hier ist eine minimale Demonstration des wünschenswerten Verhaltens:

Code: Select all

string[] source = ["giraffe", "Elephant", "Cat", "Eagle", "Gazelle", "Cow", "chicken"];
IEnumerable distinct = source
.DistinctLastBy(x => x.Substring(0, 1), StringComparer.OrdinalIgnoreCase);
Console.WriteLine(String.Join(", ", distinct));
Die Tiere gelten als Duplikate, wenn sie mit demselben Buchstaben beginnen. Die gewünschte Ausgabe ist:

Code: Select all

Eagle, Gazelle, chicken
Die tatsächliche Ausgabe meiner fehlerhaften Implementierung ist:

Code: Select all

Gazelle, Eagle, chicken
Diese Ausgabe ist falsch, da der „Eagle“ vor der „Gazelle“ in der Eingabe platziert wird, daher sollte er auch vor der „Gazelle“ in der Ausgabe platziert werden.
Online-Demo.
Wie kann ich meinen DistinctLastBy-Operator so korrigieren, dass er die richtige Ausgabe erzeugt?
Ich habe nach einem Duplikat gesucht und Ich habe keine gefunden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post