AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HashTable auf Integer-Basis

Ein Thema von Arakis · begonnen am 30. Mär 2005 · letzter Beitrag vom 3. Apr 2005
Antwort Antwort
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#1

HashTable auf Integer-Basis

  Alt 30. Mär 2005, 15:07
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.
  Mit Zitat antworten Zitat
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#2

Re: HashTable auf Integer-Basis

  Alt 31. Mär 2005, 06:30
So, habe mir dann eben selber geproggt was ich brauchte

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.
Angehängte Dateien
Dateityp: pas larne_195.pas (46,9 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#3

Re: HashTable auf Integer-Basis

  Alt 1. Apr 2005, 10:08
Hallo Arakis,

vielleicht hilft Dir die Delphi Container Library von Jean-Philippe Bempel oder die DIContainers bei The Delphi Inspiration weiter.
gruß, choose
  Mit Zitat antworten Zitat
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#4

Re: HashTable auf Integer-Basis

  Alt 3. Apr 2005, 01:43
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
Angehängte Dateien
Dateityp: zip larne.collections_144.zip (9,6 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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