AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList<T> und Comparer

Ein Thema von OlafSt · begonnen am 27. Jan 2015 · letzter Beitrag vom 29. Jan 2015
 
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TObjectList<T> und Comparer

  Alt 27. Jan 2015, 11:39
Delphi-Version: XE4
Hi Freunde,

nun ist es soweit, es gibt kein Entrinnen mehr. Ich muß mich endgültig mit Interfaces auseinandersetzen. Kam ja bisher immer drumherum... Mein Problem und Ziel ist es, eine sortierte generische TObjectList zu bekommen. Folgende, stark gekürzte Klasse:

Delphi-Quellcode:
    TPosition = class(TObject)
    public
      TimeStamp: TDateTime;
    end;
soll in eine TObjectList<TPosition> hinein und die Liste nach TPosition.TimeStamp sortiert werden. Dazu gibt es ja TObjectList<T>.Sort(IComparer<T>). Also habe ich eine Klasse gebastelt, die IComparer implementiert:
Delphi-Quellcode:
    TPositionComparer = class(TInterfacedObject, IComparer<TPosition>)
       function Compare(const Left, Right: TPosition): integer;
    end;

function TPositionComparer.Compare(const Left, Right: TPosition): integer;
var
   RDT, LDT: TDateTime;
begin
     RDT:=Right.Timestamp;
     LDT:=Left.Timestamp;
     if LDT < RDT then
        exit(-1);
     if LDT=RDT then
        exit(0)
     else
        exit(1);
end;
Schön ausführlich, damit wir auch schön debuggen können und so.

Im Einsatz sieht das ganze dann so aus:

Delphi-Quellcode:
var
   TCo: TPositionComparer;
begin
     //Result ist ein TPosition und wird hier zusammengebaut
     //FPositions ist eine TObjectList<TPosition>
     FPositions.Add(Result);
     TCo:=TClientComparer.Create;
     FPositions.Sort(TCo);
Compiliert klaglos. Funktioniert klaglos.

Fragen: Abgesehen davon, das ich auch eine anonyme Methode hätte verwenden können: Ist das überhaupt so richtig aufgebaut ? Außerdem höre ich immer wieder, das man Interfaces nicht wieder freigeben muß. Trifft das auch auf mein TCo, das ich immer wieder neu erzeuge, zu ? Wenn nein, wie muß das dann gemacht werden ?

Danke für die Hilfe !
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz