C# :: Aufgabe #363

1 Lösung Lösung öffentlich

Duplikate bis auf Dopplungen aus Liste entfernen

Anfänger - C# von JKooP - 21.02.2021 um 11:24 Uhr
Gegeben ist eine sortierte Liste, welche alle gängigen Datentypen aufnehmen kann.
Dabei sind alle Werte des gleichen Typs. Statt der Liste können auch Arrays genutzt werden.

Beispiele:
List<int> {1, 1, 1, 2, 2, 3}
List<char> {‘a’, ‘a’, ‘b’, ‘c’, ‘c’, ‘c’}

Aus dieser Liste sollen jetzt alle Duplikate entfernt werden, wobei hier jeder Wert 2-mal vorkommen darf.

Lösung:
List<int> {1, 1, 2, 2, 3}
List<char> {‘a’, ‘a’, ‘b’, ‘c’, ‘c’}

Schreibe eine Methode/Funktion, die eine Liste/Array aufnimmt, die Duplikate entfernt
und diese dann wieder als Rückgabewert oder Referenz zurückgibt.

Viel Spaß

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 31.03.2021 um 19:26 Uhr
NET 5.x; C# 9.x; VS-2019
Mittels Parameter target in RemoveDuplicates() kann die Anzahl der Duplikate festgelegt werden.
Quellcode ausblenden C#-Code
using System.Collections.Generic;
using System.Linq;

List<int> nums = new () { 1, 1, 1, 2, 2, 2, 2, 3 };
List<char> chars = new () { 'a', 'a', 'b', 'c', 'c', 'c' };
List<string> strings = new () { "Train", "Train", "Train", "Your", "Programmer", "Programmer" };

nums.RemoveDuplicates().Print();
chars.RemoveDuplicates(2).Print();
strings.RemoveDuplicates(3).Print();

static class Extensions
{
    public static List<T> RemoveDuplicates<T>(this List<T> lst, int target = 1) => lst.GroupBy(x => x).Select(x => x.Take(target)).SelectMany(x => x).ToList();
    public static void Print<T>(this List<T> lst) => System.Console.WriteLine(string.Join(", ", lst));
}