![]() |
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:
Wo gibt es so etwas?
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; 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. |
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. |
Re: HashTable auf Integer-Basis
Hallo Arakis,
vielleicht hilft Dir die ![]() ![]() |
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:
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.
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 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 17:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz