Abou Chleih

{the magic lies between the brackets}

Menü Schließen

Schlagwort: Lambda

[C#/.NET] – Liste in mehrere Listen splitten/gruppieren

Mein Problem war es zu Beginn eines früheren Projektes eine List<T> (in meinem Fall List<Reporter>) in mehrere Unterlisten zu sortieren.
Meine Klasse sah grob so aus:

     class Reporter
    {
        public string name;
        public string birthYear;

        public Reporter(string birthYear, string name)
        {
            this.name = name;
            this.birthYear = birthYear;
        }
    }

Meine Liste bestand aus mehreren Reportern und sah so aus:

Birthyear Name

  • 1991 Jon
  • 1992 Dominic
  • 1993 Jack
  • 1994 Hillary
  • 1991 Jackson
  • 1994 Jaqueline

Nun wollte ich die Liste in mehrere Listen splitten und zwar je nach Geburtsjahr:

Birthyear Name


1991 Jon

1991 Jackson


1993 Jack


1992 Dominic


1994 Hillary

1994 Jaqueline


Das Ergebnis erreichte ich relativ einfach mit einem Einzeiler:
Zuerst gruppierte ich die Liste mit einer Lambda-Expression nach dem Geburtsjahr:

 var groups = reporterList.GroupBy(x => x.birthYear); 

Danach wählte ich jede Gruppe aus (Lambda) und konvertierte jedes Element in eine Liste:

 var groups = groups.Select(grp => grp.ToList()); 

Und schlussendlich fügte ich alle Gruppen in eine Liste zusammen:

 var groups = groups.ToList(); 

Ein Einzeiler, der all das macht, ist einfach eine Aneinanderreihung dieser Befehle:

 var groups = reporterList.GroupBy(x => x.birthYear).Select(grp => grp.ToList()).ToList(); 

Und voíla hat man eine Liste aller Gruppen.

[C#/.NET] – Lambda Expressions in LINQ Queries

Genauso wie LINQ wurden auch Lambda Expressions in C# mit dem .NET Framework 3.5 eingeführt.
Diese haben viele Vorteile. Unter anderem haben sie den Syntax von anonymen Methoden vereinfacht und bieten eine flexiblere Nutzung. Des weiteren können sie genutzt werden um LINQ Abfragen auszuführen.

Beispiel:

 IEnumerable query = from names in nameList where names.forename[0].ToString().ToLower() == "s" select names; 

Ich frage hier ganz einfach ab, welcher Vorname in der List mit einem s beginnt (unabhängig von Groß-/Kleinschreibung).
Schneller und schöner geht es mit Lambda Ausdrücken:
Wir benötigen wieder ein IEnumerable als „Platz“ für unsere gefundenen Einträge.

  IEnumerable v = nameList.Where(name => name[0].ToString().ToLower() == "s"); 

Jetzt fragen wir ab, wo(Where) sich (in der List nameList) Einträge befinden, die mit einem s beginnen (auch hier unabhängig von der Orthografie).

Der => (Operator Lambda) wird genutzt um die Eingangsvariable (name) vom Lambdaausdruck zu trennen

© 2018 Abou Chleih. Alle Rechte vorbehalten.

Thema von Anders Norén.