Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generische Liste sortieren (ohne .NET) (https://www.delphipraxis.net/126617-generische-liste-sortieren-ohne-net.html)

lincore 29. Dez 2008 15:28


Generische Liste sortieren (ohne .NET)
 
Moin,
ich schreibe gerade eine generische Listenklasse, die ein array of T kapselt. Nun würde ich gerne eine universell verwendbare Methode implementieren, um die Liste zu sortieren. Soweit ich weiß, lassen sich Operatoren nur mit .NET überladen (welches ich nicht verwende). Andere Möglichkeiten wollen mir als Anfänger auch nicht einfallen.

Weiß jemand eine Lösung?
lincore


PS: Hier das Interface meiner Klasse (soweit):
Delphi-Quellcode:
const
  TOP_OF_LIST        =  -255; // equals system.high(mArray)

type
  TGenericList<T> = class
  private
    mArray: array of T;
    //mError: boolean;
    mErrorMsg: string;
    mCount: integer;
    function auxRearrange(fromPosition: integer = TOP_OF_LIST;
                       insertion: boolean = true; freeSpace: integer = 1): boolean;
    function getData(index: integer): T;
    procedure setData(index: integer; element: T);

  public
    constructor create();
    procedure clear();

    function assign(list: TGenericList<T>): boolean;

    function insert(element: T; index: integer): boolean; overload;
    function insert(list: TGenericList<T>; index: integer = TOP_OF_LIST;
                    from: integer = 0; til: integer = TOP_OF_LIST): boolean;
                    overload;

    function remove(index: integer): boolean; overload;
    function remove(first, last: integer): boolean; overload;

    function push(element: T): boolean;
    function pop(): T;

    function length(): integer;
    function high(): integer;
    function notEmpty(): boolean;

    function first(var element: T): boolean;
    function next(var element: T): boolean;
    function last(var element: T): boolean;

    property error: string read mErrorMsg;
    property data[index: integer]: T read getData write setData;
  end;

Dax 29. Dez 2008 15:33

Re: Generische Liste sortieren (ohne .NET)
 
Du brauchst noch einen Komparator, den du im Konstruktor mitgibst. Das wäre zum Beispiel eine TFunc<T, T, Integer> (oder wie ihr Delphianer das schreibt).

lincore 29. Dez 2008 15:38

Re: Generische Liste sortieren (ohne .NET)
 
Danke für den Tipp!
Mir ist die Delphi-Syntax zur Zeit mindestens ebenso fremd wie dir, aber ich glaube ich habe verstanden :)
Jetzt muss ich nur noch herausfinden, wie die Griechen mit Funktionsvariablen umgehen, aber das wird Dank der hoffnungslos überladenen Delphi-Hilfe sicher kein Problem sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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