C# :: Aufgabe #363
1 Lösung
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ß
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:
NET 5.x; C# 9.x; VS-2019
Mittels Parameter target in RemoveDuplicates() kann die Anzahl der Duplikate festgelegt werden.
Mittels Parameter target in RemoveDuplicates() kann die Anzahl der Duplikate festgelegt werden.
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)); }