Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi HashTable auf Integer-Basis (https://www.delphipraxis.net/43194-hashtable-auf-integer-basis.html)

Arakis 30. Mär 2005 14:07


HashTable auf Integer-Basis
 
Hallo,
Ich benötige Key-Value-Collection, auf die ich per Key zugreifen kann. Der Key soll ein Integer sein und das Value ein Pointer. Ich habe da die TBucketList gefunden, doch die nimmt als Key nur einen Pointer. Das ist aus zwei Gründen dämlich:

- Ich müsste für einen Integer erst den Pointer suchen - doch der hat auf jeden Fall eine andere Adresse da andere Variabel
- In einer Funktion deklarerte Werte-Variabeln werden nach Funktionsende Freigegeben.

Also ich bräuchte in etwa sowas:

Delphi-Quellcode:
var
  List: TIntegerHashTable;

procedure func1;
Begin
  List:=TIntegerHashTable.Create;
  List.Add(4643, <Pointer of irgendwas>)
End;

procedure func2;
var
  p: Pointer;
Begin
  p := List.Item[4643];
  {...}
End;
Wo gibt es so etwas?

Ansonsten müsste ich mir eine "SortedList" wie in .NET machen, aber da ich nicht Jahre mit Algorimtmen verbringen möchte, verwende ich dann einfach eine selber gemachte TIntegerList als Key-Liste und eine TList als Pointer-Liste, dann noch etwas QuickSort und eine Priese Binary-Search ;) Nur weiß ich nicht ob das von der Geschwindigkeit akzeptabel ist. Denn die Liste wird bis zu 100.000 Integer-Werte haben, die rasand schnell abgefragt werden müssen.

Arakis 31. Mär 2005 05:30

Re: HashTable auf Integer-Basis
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, habe mir dann eben selber geproggt was ich brauchte :P

Wer so etwas auch braucht, kann sich ja die Datei im Anhang einbinden.

TPointerList: Verwaltet eine Liste von Pointers
TIntegerList: Verwaltet eine Liste von Integers
TCustomList: Verwaltet eine Liste von TCustomValue - Kann einfach kopiert werden. Dabei muss TCustomValue durch T.... ersetzt werden.

TCustomSortedList: Verwaltet Integer - TCustomValue - Beziehungen, es kann sehr schnell per Integer auf den Wert zugegriffen werden.

Quelltexte zu 80% getestet und beta ;)

Bin für Kritik gern offen.

choose 1. Apr 2005 09:08

Re: HashTable auf Integer-Basis
 
Hallo Arakis,

vielleicht hilft Dir die Delphi Container Library von Jean-Philippe Bempel oder die DIContainers bei The Delphi Inspiration weiter.

Arakis 3. Apr 2005 00:43

Re: HashTable auf Integer-Basis
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, habe das ganze überarbeitet und so hergerichtet, dass es nur ein Minnimaler Aufwand ist, eine benutzerdefinierte Collection für eine eigene Klasse zu erzeugen, welche voll Typisiert ist. Eine solche Klasse hat ca. nur 100 Zeilen.

Liste aller Klassen:

Delphi-Quellcode:
TCustomList
  TCustomComparer (Kopier-Vorlage)

  TPointerList
    TPointerComparer

  TIntegerList
    TIntegerComparer

  TBaseObjectList (Interne Basisklasse)
    TObjectComparer

    TAbstractObjectList (Basisklasse für alle auf TObject basiernden Klassen)
      TObjectList
      TCustomObjectList (Kopier-Vorlage)

TCustomSortedList (Kopier-Vorlage)
  TBaseObjectSortedList (Interne Basisklasse)
    TAbstractObjectSortedList (Basisklasse für alle auf TObject basiernden Klassen)
      TObjectSortedList (Kopier-Vorlage)
      TCustomObjectSortedList
SortedList's verwalten Key-Value-Beziehungen, die Keys sind dabei immer Integer und immer sortiert. Dadurch kann ein Key sehr schnell gefunden werden und das dazugehörige Value.

Einfach z.B. die Klasse TCustomObjectList kopieren und dann erst "TCustomValue" zu "TMyClass" und dann "TCustom" zu "TMyClass". Das Ergebnis wäre dann eine TMyClassObjectList, welche eine Liste von TMyClass verwalten kann.

Wäre schön wenn jemand so etwas auch braucht ;)

Ach ja und entschuldigung wenn ich den Klassennamen "TObjectList" verwende bzw. dadurch überschreibe, aber die von Borland kann eh nicht so viel ;)

Größe der Bibliothek: 3.500 Zeilen


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