Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel? (https://www.delphipraxis.net/198171-gibt-es-eine-art-tdictionary-mit-nicht-eindeutigem-schluessel.html)

Codehunter 10. Okt 2018 07:58

Delphi-Version: 10.2 Tokyo

Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Hallo!

Gibt es in der RTL vielleicht schon fertig eine Klasse, die ähnlich TDictionary funktioniert, aber keine eindeutigen Schlüssel erzwingt? Zum Auffinden der Einträge dann so eine Art Filter auf die Schlüsselliste legen und bei mehreren Treffern mit GetFirst/GetNext navigieren. Klar geht auch selber Bauen, aber evtl. ist ja was fertiges da was ich noch nicht kenne?

Grüße
Cody

Fritzew 10. Okt 2018 08:17

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von Codehunter (Beitrag 1415377)
Hallo!

Gibt es in der RTL vielleicht schon fertig eine Klasse, die ähnlich TDictionary funktioniert, aber keine eindeutigen Schlüssel erzwingt? Zum Auffinden der Einträge dann so eine Art Filter auf die Schlüsselliste legen und bei mehreren Treffern mit GetFirst/GetNext navigieren. Klar geht auch selber Bauen, aber evtl. ist ja was fertiges da was ich noch nicht kenne?

Grüße
Cody

Klar :
Delphi-Quellcode:
Dictionary<string, TList<Wasauchimmer>>;

Codehunter 10. Okt 2018 08:25

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von Fritzew (Beitrag 1415379)
Klar :
Delphi-Quellcode:
Dictionary<string, TList<Wasauchimmer>>;

Hehe, so einfach kanns manchmal sein :-) Da muss ich nur ein bisschen Organisation drumrum schreiben. Danke!

Stevie 10. Okt 2018 09:31

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Diese Datenstruktur nennt man auch Multimap. Du hast zwar nach Vorkommen in der RTL gefragt, aber der Vollständigkeit halber erwähn ich mal, dass es einen solchen Typ in Spring auch gibt. Der kümmert sich dann um das "bisschen Organisation drumrum".

Codehunter 10. Okt 2018 09:35

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von Stevie (Beitrag 1415392)
Diese Datenstruktur nennt man auch Multimap. Du hast zwar nach Vorkommen in der RTL gefragt, aber der Vollständigkeit halber erwähn ich mal, dass es einen solchen Typ in Spring auch gibt. Der kümmert sich dann um das "bisschen Organisation drumrum".

Der Grund warum ich nach der RTL fragte ist, dass ich an einem großen Projekt arbeite und der Projektmanager sich ein bisschen schwer damit tut, zusätzliche Bibliotheken aufzunehmen.

mkinzler 10. Okt 2018 09:53

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Spring (for Delphi) ist imho ein etabliertes Projekt.

Neutral General 10. Okt 2018 10:06

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von mkinzler (Beitrag 1415394)
Spring (for Delphi) ist imho ein etabliertes Projekt.

Es ist allerdings auch ein großer Brocken wenn man eigentlich nur eine einzige Klasse braucht ;)

mkinzler 10. Okt 2018 10:10

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Beinhaltet aber auch andere "Goodies"

Stevie 10. Okt 2018 10:18

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von Neutral General (Beitrag 1415396)
Zitat:

Zitat von mkinzler (Beitrag 1415394)
Spring (for Delphi) ist imho ein etabliertes Projekt.

Es ist allerdings auch ein großer Brocken wenn man eigentlich nur eine einzige Klasse braucht ;)

Eigentlich ist es ziemlich leichtgewichtig, wenn man Dinge aus Spring.Collections nutzt.
Sollte deine Erfahrung anders sein, kontaktier mich bitte diesbezüglich für Details, da ich sehr viel Wert darauf lege, dass es für einfache Dinge ebend kein "großer Brocken" ist.

Neutral General 10. Okt 2018 10:35

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Das war auf die Größe der gesamten Bibliothek bezogen, nicht auf die einzelnen Klassen/Units.
Ich würde mir wahrscheinlich keine ganze Bibliothek mit etlichen Units und noch mehr Klassen/Interfaces runterladen und installieren nur um eine einzige Klasse daraus zu benutzen ;)

mkinzler 10. Okt 2018 10:37

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Warum nicht? Wenn sich dabei die Größe der Exe signifikant erhöhen würde, könnte ich die Bedenken u.U. verstehen.

Aber wir werden langsam OT.

taveuni 10. Okt 2018 10:53

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von Fritzew (Beitrag 1415379)

Klar :
Delphi-Quellcode:
Dictionary<string, TList<Wasauchimmer>>;

Und wie soll das funktionieren? Der String ist doch der Key und damit eindeutig?

Neutral General 10. Okt 2018 10:59

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von taveuni (Beitrag 1415406)
Zitat:

Zitat von Fritzew (Beitrag 1415379)

Klar :
Delphi-Quellcode:
Dictionary<string, TList<Wasauchimmer>>;

Und wie soll das funktionieren? Der String ist doch der Key und damit eindeutig?

Jo aber durch die Liste in der mehrere Daten drin sind haben dadurch mehrere Daten indirekt den gleichen Key.
Es läuft aufs Gleiche hinaus.

key * a + key * b = key * (a + b) :mrgreen:

Codehunter 10. Okt 2018 11:17

AW: Gibt es eine Art TDictionary mit nicht-eindeutigem Schlüssel?
 
Zitat:

Zitat von taveuni (Beitrag 1415406)
Zitat:

Zitat von Fritzew (Beitrag 1415379)

Klar :
Delphi-Quellcode:
Dictionary<string, TList<Wasauchimmer>>;

Und wie soll das funktionieren? Der String ist doch der Key und damit eindeutig?

Also in meinem Fall würde das sehr gut funktionieren, denn "Wasauchimmer" wäre ein Integer und wiederum Index auf einer Objektliste. Der Key käme dann einem Datenmengenfilter gleich und über First/Next-Methoden würde ich den Index der TList im Dictionary verschieben.

Wahrscheinlich könnte man ähnliches auch mit einer Memtable bewerkstelligen. Aber erstens gefällt mir die Effizienz der Hashtable im Dictionary sehr gut und andererseits muss ich so nicht Tonnen von Code umbauen um auf Memtable umzustellen.


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