Generische Listen in Delphi
Delphi bietet seit Delphi 2009 ähnlich wie z.B. in Java auch die Möglichkeit, generische Typen zu verwenden. Diese ermöglichen es, Klassen und Methoden zu schreiben, welche mit einen Typparameter parametrisiert werden, um Typsicherheit trotz generischer Programmierung zu ermöglichen.
Ein einfaches Beispiel dafür sind Listen. Musste man früher für jeden Datentyp eine eigene Listenklasse entwickeln, kann man dies nun so formulieren, dass die Listenklasse nur einmal entwickelt werden muss und erst wenn das konkrete Listenobjekt erzeugt wird, entscheidet sich von welchem Datentyp die Liste ist.
Delphi bietet in seiner Bibliothek Generics.Collections bereits diverse generische Listenklassen an, von der wir uns die TList-Klasse ansehen wollen.
Nehmen wir an wir haben eine Klasse TMitarbeiter:
interface
type
TMitarbeiter = class(TObject)
private
public
id: integer;
vorname: string;
nachname: string;
end;
implementation
end.
Wollen wir nun eine Liste mit allen Mitarbeitern erstellen, könnten wir diese folgendermaßen deklarieren und befüllen:
function getMitarbeiterList: TList<Mitarbeiter>;
var mitarbeiterList: TList<TMitarbeiter>;
mitarbeiter: TMitarbeiter;
begin
mitarbeiterList := TList<TMitarbeiter>.create;
// Beispiel-Mitarbeiter anlegen
mitarbeiter1 := TMitarbeiter.create;
mitarbeiter1.id := 1;
mitarbeiter1.vorname := 'Anton';
mitarbeiter1.nachname := 'Fischer';
// Mitarbeiter der Liste hinzufügen
mitarbeiterList.add(mitarbeiter1);
result := mitarbeiterList;
end;
Code-Sprache: PHP (php)
Um in der Liste alle Mitarbeiter durchzugehen, kann man folgende Schleife erstellen:
var mitarbeiter: TMitarbeiter;
begin
for mitarbeiter in mitarbeiterList do begin
// etwas mit mitarbeiter machen
end;
end;
Code-Sprache: JavaScript (javascript)
Generische Liste benutzerdefiniert sortieren
Um die Liste zu sortieren, kann man die Funktion sort verwenden, welcher man eine eigene Vergleichsfunktion mit einer Klasse vom Typ TComparer übergibt. Hierzu muss man vorher noch die Bibliothek Generics.Defaults einbinden.
Beispiel: Sortieren unserer Mitarbeiter-Liste nach Nachnamen
uses Generics.Collections, Generics.Defaults, ……;
procedure SortiereMitarbeiter(mitarbeiterList: TList<TMitarbeiter>);
begin
mitarbeiterList.Sort(TComparer<TMitarbeiter>.Construct(
function( const left, right: TMitarbeiter): integer
begin
result := CompareText(left.nachname, right.nachname);
end
)
);
end;
Code-Sprache: PHP (php)
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.