Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#1

verschiedene Objektlisten schnell sortieren und filtern

  Alt 24. Jun 2013, 20:26
Gesetzt den Fall, ich habe mehrere Listen mit verschiedenen Objekten.
- Personenliste
- Adressliste
- Autoliste

Die Objekte verwalten dann u.a. ggf. Instanzen auf andere Objekte.
Z.B. unterhält eine Person eine Liste von Autos (real eine Liste von Id´s, die dann zur Laufzeit bei Bedarf zur Objektbeschaffung (GetAuto(Id) ) genutzt werden).

Nun möchte ich alle Listen unterschiedlich sortieren können (bzw. dies dem User ermöglichen).
Suchen und sortieren realisiere ich derzeit erst mal über BinarySearch mit einem Comparer, der sich derzeit nur auf die ID bezieht:
Delphi-Quellcode:
function TssObjectComparer.Compare(const O1, O2: TssObject): Integer;
begin
  Result := CompareStr(O1.Id, O2.Id);
end;

...

procedure TssIO_Custom.RegisterObject(ssObj: TssObject);
var
  Index: Integer;
begin
  if not Assigned(ssObj) then
    Exit;
  if not ssObjectList.BinarySearch(ssObj, Index) then
    ssObjectList.Insert(Index, ssObj);
end;

Wenn ich jetzt nach anderen Eigenschaften sortieren/suchen/filtern will (z.B. Person.FirstName(aufsteigend) UND Person.LastName(absteigend)) und beliebigen sonstigen Varianten, wie realisiert man das am besten?
Für jeden Sortierfall eine eigene Liste mit eigenem Comparer?
Man muss dann natürlich jeden Einfüge- und Löschvorgang für eine Objektmenge für mehrere Listen durchführen.
Ist das als zweckmäßig und sicher anzusehen? Der Speicherverbrauch ist natürlich auch höher.

Der umfangreichere Quelltext wäre nicht das Problem, da dieser durch einen Experten erzeugt wird.
Ich müsste dann in den Metadaten nur definieren, welche "Indizes" benötigt werden.

Alternativ könnte man eine Liste immer umsortieren, was allerdings bei größeren Listen dann etwas dauern kann.

Ein Problem ist z.B. auch, wenn ich alle Personen suchen will, deren Adressobjekt den Ort "Halle" beinhaltet.
Das ist wohl dann der Nachteil gegenüber einer SQL-Abfrage.


Grundsätzlich will ich das dann so organisieren, dass alternativ zu Objektlisten ein ORM verwendet werden kann.
In dem Fall würde die Sortierung/Filterung dann über SQL realisiert.
Für die Anwendung soll sich dann keine Änderung ergeben, egal ob die Daten in Objektlisten oder über einen ORM verwaltet werden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat