numerische Keys für TDictionary/TObjectDictionary

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
jammernich
Beiträge: 28
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

numerische Keys für TDictionary/TObjectDictionary

Beitrag von jammernich »

In meinem Programm lade ich viele Dateien nacheinander und jeder Datensatz soll über einen numerischen Wert im Programm angesprochen werden können.

Code: Alles auswählen

uses
  Classes, Generics.Collections;

type
  TDict = specialize TObjectDictionary<Longint, TKlasse>; 
zu den numerischen Keys habe ich eine Frage: Wie soll ich die Keys am besten vergeben damit das Dictionary effizient erstellt werden kann?

fortlaufend: 1-2-3-4..n

zufällig z.B. so: 2345-1-12-345345-3245-612

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: numerische Keys für TDictionary/TObjectDictionary

Beitrag von af0815 »

Die Frage ist vielmehr, wie willst du später die Datensätze effizient ansprechen. Dafür sollte ja der Schlüssel sein. Vergleiche es mit dem Primärschlüssel in einer Datenbank.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 596
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: numerische Keys für TDictionary/TObjectDictionary

Beitrag von Niesi »

jammernich hat geschrieben: Sa 14. Jun 2025, 06:24
...

zu den numerischen Keys habe ich eine Frage: Wie soll ich die Keys am besten vergeben damit das Dictionary effizient erstellt werden kann?

fortlaufend: 1-2-3-4..n

zufällig z.B. so: 2345-1-12-345345-3245-612
.

Eine Frage, bitte: Wieso die Erwägung auf "zufällig"? :?: :?: :?:
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Warf
Beiträge: 2141
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: numerische Keys für TDictionary/TObjectDictionary

Beitrag von Warf »

Das ist komplett egal da sie eh gehasht werden. Die Frage ist, wenn du lineare keys hast, warum benutzt du nicht einfach ein Array oder eine Liste?

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 596
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: numerische Keys für TDictionary/TObjectDictionary

Beitrag von Niesi »

Warf hat geschrieben: Sa 14. Jun 2025, 11:43 Das ist komplett egal da sie eh gehasht werden. Die Frage ist, wenn du lineare keys hast, warum benutzt du nicht einfach ein Array oder eine Liste?
Das mit Liste oder array stimmt.

Aber egal? Wenn "zufällige" keys benutzt werden, so musst Du sicherstellen, dass jeder key einmalig ist - daher verstehe ich noch nicht die Idee mit "zufällig" ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
photor
Beiträge: 523
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
CPU-Target: 64Bit

Re: numerische Keys für TDictionary/TObjectDictionary

Beitrag von photor »

Warf hat geschrieben: Sa 14. Jun 2025, 11:43 Das ist komplett egal da sie eh gehasht werden. Die Frage ist, wenn du lineare keys hast, warum benutzt du nicht einfach ein Array oder eine Liste?
Die Frage hatte ich mir auch gestellt. So mache ich das:
  • üblicherweise lese ich mehrere große Datenfiles (FE-Ergibnisse) ein, die dann miteinander verwurstet werden
  • Die werden dann der Reihe nach gescannt und die wichtigen Daten in eine Struktur (eine entsprechend definierte Klasse) gepackt
  • diese werden dann in eine TObjectList<TKlasse> gehängt, so dass alle Daten dann erreichbar sind (zumal der Original-Poster ja sowieso schon eine TKlasse definiert hat)..

Den Vorteil eines TDictionaries habe ich nicht gesehen/verstanden - und daher erst einmal nicht gepostet. Sorry.

Also ich würde es auch über eine Liste lösen.

Ciao,
Photor

PS: den grundsätzlichen Vorteil von TDictionary kenne ich schon. Aber wenn sowieso der Key beliebig vergeben wird ... ?

Antworten