Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

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

AW: verschiedene Objektlisten schnell sortieren und filtern

  Alt 26. Jun 2013, 16:37
Danke Euch. In Uwes Richtung habe ich schon gedacht.
Bei der Generierung der Klassen kann ich ja automatisch unterschiedliche Comparer definieren.

Die Frage ist dann halt, ob ich durch List.Sort(aComparer) eine Liste nach Bedarf umsortiere oder persistent unterschiedliche Listen mit jeweils einem anderen Comparer parallel verwalte.
Hinzufügen und Löschen von Einträgen müsste dann entsprechend natürlich in z.B. 6 Listen parallel erfolgen.
(So ungefähr wäre das dann ja wie das Verwalten von Indizes in einer Datenbank - sehr pauschalisiert natürlich.)

Ich werde mal entsprechende Versuche machen. Bei großen Listen ist sicher die zweite Variante merklich schneller.
Das Einfügen von Einträgen unter Verwendung von BinarySearch (wie im Beispiel beschrieben) geht ja extrem fix. Umsortieren von Listen kann dagegen sicher etwas dauern.


Andere Frage:

Ich habe eine Personenliste. Jede Person kann mehrere Adressen haben (AdressId´s in einer SubListe).
Nun suche ich alle Personen, die eine Adresse in "Halle" haben.

Suchergebnis soll eine Liste von Id´s sein (StringList).
Code:
#4782-3578-2323523
#736-536-936346
#7568-374-3453465
Zur weiteren Verarbeitung werden dann die Personenobjekte mit den entsprechenden zugehörigen Id´s abgerufen.

Das Framework kann dabei
a) die Daten in Objektlisten (PersonenListe und AdressenListe) verwalten
oder
b) die Daten über einen ORM in einer Datenbank verwalten.

Die Anwendung soll von der Speichervariante grundsätzlich keine Kenntnis haben.

Ich könnte also alle Personenabjekte abrufen und dann deren Adressobjekte. Ist ein Adressobjekt mit "Halle" dabei, wird die PersonenId in die Ergebnisliste aufgenommen.

Alternativ könnte ich alle Adressdaten durchsuchen und mir die AdressId´s für "Halle" merken.

Wenn nun jede Person nur eine Adresse hätte könnte man jetzt leicht über einen Comparer nacheinander per BinarySearch alle PersonenId´s für alle vorgemerkten AdressId´s suchen. Das wäre sicher extrem schnell.

Da aber jede Person mehrere Adressobjekte haben kann, kommt man so nicht weiter. Also bleibt ein Interieren über alle Personen und Durchsuchen von deren AdressId-Liste (da diese nicht sortiert sein muss über IndexOf).

Sofern ein ORM genutzt wird bliebe natürlich noch die Möglichkeit, die PersonenId´s über ein SQL-Statement zu ermitteln. Dies würde ich aber mal als Sonderfall betrachten, der hier außen vor bleiben soll.

Ich brauche eben genau eine Lösung für die Suche in vorliegenden verschachtelten Objekten (egal ob diese über Objektlisten oder einen ORM verwaltet werden). Real sind letztlich aber nur die Id´s der Subobjekte (im Beispiel Stringliste mit AdressenId´s) im übergeordneten Objekt (hier Personenobjekt) abgelegt.


PS: Ein ORM muss die zu verwaltenden Tabellen natürlich so indizieren, dass schnelle Zugriffe auf die "Objektdaten" möglich sind und er soll auch solche Abfragen per SQL realisieren. Das Projekt selbst soll aber auf einen direkten Zugriff auf die Datenbank nicht angewiesen sein. Lediglich optional soll ein solcher Weg MÖGLICH sein.
Primeres Augenmerk liegt für mich daher erst einmal im Umgang mit reinen Objektlisten ohne Datenbank.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (26. Jun 2013 um 17:00 Uhr)
  Mit Zitat antworten Zitat