Noch ein "sinnvoller" Blog

Monat: September 2019

Programmer Wallpaper…

Nach sehr langer Zeit hab ich mal wieder etwas mit GIMP gearbeitet. Nach etwas einarbeitungszeit (die Menüs / Funktionen haben sich doch wohl verändert), hab ich mich mal wieder daran gemacht ein Wallpaper zu erstellen. Das Ergebnis könnt ihr hier bestaunen 🙂

Being a programmer…

Passend dazu hier noch ein etwas älterer Wallpaper.

Software engineer

C# – Lücken in int-Listen finden

Hat man z.B. eine Liste mit Ids und möchte prüfen ob es dort Lücken gibt, kann man das ganz einfach wie folgt tun:

Im ersten Schritt (Zeile 8) wird die Liste einmal sortiert. Anschließend wird das erste Element (Zeile 11) und das letzte Element (Zeile 13) aus der Liste entnommen. Danach wird die Anzahl der Elemente (Zeile 15) ermittelt.

In Zeile 18 wird danach eine neue, komplette Liste erstellt. Anschließend werden die beiden Listen (rangeList, originalList) miteinander verglichen um zu schauen wo Lücken vorhanden sind. Diese Liste wird am Ende zurückgegeben.

Beispiel

Gehen wir davon aus, das wir die folgende Liste vorliegen haben:

var tempList = new List<int> { 3, 9, 14, 15 };
  • Erste Element (Zeile 11): 3
  • Letzte Element (Zeile 13): 15
  • Anzahl Elemente (Zeile 15): 13

Mit diesen Werten wird jetzt eine neue Liste erstellt, welche bei 3 beginnt und insgesamt 13 Elemente enthält:

var rangeList = Enumerable.Range(first, count);
// Result: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15

Mit Except werden die beiden Listen jetzt mit einander verglichen. Als Ausgangspunkt wird hier die neu erstellte Liste genommen. Dagegen wird die original Liste gehalten. Als Ergebnis erhält man jetzt alle Einträge, welche in der neuen Liste (rangeList) vorhanden sind jedoch nicht in der originalen Liste (tmpList). Das Ergebnis sieht dann wie folgt aus:

var gapList = rangeList.Except(originalList);
// Result: 4, 5, 6, 7, 8, 10, 11, 12, 13

Das ganze ist jetzt relativ ausführlich geschrieben um einmal die einzelnen Steps zu verdeutlichen. Am Ende (Zeile 27) findet man aber noch mal einen kleinere Aufruf, so dass man sich die Zeilen 10 – 24 sparen kann.

return Enumerable.Range(originalList.First(), 
    originalList.Last() - originalList.First() + 1).
    Except(originalList).ToList(); 

© 2024 Paul's Blog

Theme von Anders NorénHoch ↑