![]() |
Mengentypen (set?) zur Laufzeit füttern
Moin,
die Mengentypen mögen mich nicht oder ich sie nicht :? Ich habe eine Ansammlung von integers, die ich mit geringem Aufwand parsen möchte. Also etwa mit
Delphi-Quellcode:
Die Menge der Zahlen in der Klammer ist so groß, dass sie irgendwo anders deklariert werden muss.
if check in [1,28,34,99] then
begin //Code end; Der Vergleich kann auch als string stattfinden, weil ich die Fehlercodes so geliefert bekomme. Noch schöner wäre es, wenn ich einen Mengentyp zur Laufzeit aus einer ini füttern könnte. Was ist da der sinnvollste Ansatz? Den Weg über eine array-Prüfung könnte ich natürlich gehen, aber den Umgang mit den Mengentypen würde ich da gerne ausloten. Ich gehe mal davon aus, dass die Performance da höher ist (sind schon einige Daten zu prüfen). Ach ja, man braucht ja jetzt manchmal den Disclaimer: bitte nur ernstgemeinte Zuschriften unter ... :wink: Grüße, Messie |
Re: Mengentypen (set?) zur Laufzeit füttern
Die Sets werden unter Delphi soweit ich weiß mit Bitmasken realisiert. Wenn du das für größere Werte nachbauen willst, könntest du dir die Klasse TBits anschauen. Aber bedenke, dass die Daten in dieser Form, sehr, sehr groß werden. Ein Integer hat 32Bit, das heißt er kann Werte von 0 bis 4 294 967 295 darstellen. Für jeden dieser Werte brauchst du bei der Bitmaske ein Bit, somit wäre die Bitmaske für einen 32Bit-Integer nach meiner Rechnung über 500MB groß! Ich weiß nicht, ob du das wirklich willst...
|
Re: Mengentypen (set?) zur Laufzeit füttern
Wenn ich das richtig verstanden habe, sind die Mengentypen nur dann sinnvoll und auch schneller, wenn ein einzelnes Element nicht größer als ein Byte (oder Word?) ist. Das würde zu den Beispielen passen, die in der OH stehen.
Was mich etwas irritert, ist, dass der Compiler Ordinaltypen verlangt. Und die dürfen ja schon größer als ein Word sein, akzeptieren aber laut OH keine In64-Typen ( ord() ). Hmm, so richtig schlüssig ist das für mich noch nicht. Vielleicht fehlt in der OH dort die Angabe der Grenzen. Dann nehme ich wohl doch erstmal das array. Grüße, Messie |
Re: Mengentypen (set?) zur Laufzeit füttern
Ordinale Typen sind eigentlich 1 Byte große Typen wie Byte oder Char. (Nein, dass ist nicht die korrekte Definition - ich weiß..)
Word/Cardinal/Integer/Int64 etc sind keine Ordinalen Typen. Genau wie Strings. Wieso nimmst du kein Array? |
Re: Mengentypen (set?) zur Laufzeit füttern
Zitat:
Ich hatte in Richtung Performance gedacht, deshalb die Frage nach Mengentypen. Die zu analysierende Datenmenge wird halt recht groß... Grüße, Messie |
Re: Mengentypen (set?) zur Laufzeit füttern
Ich glaube Mengen wären in dem Fall nur im Code praktischer und leichter zu handhaben. Performanter wären die glaube ich nicht.
|
Re: Mengentypen (set?) zur Laufzeit füttern
Ordinal heisst lediglich "geordnet abzählbar", d.h. die Werte haben einen Rang, einen definierten und gleichmäßigen Abstand, und man kann sie nacheinander "aufsagen". Folglich sind soweit alle Ganzzahltypen in Delphi ordinal. Mal nur so am rande, weil's mir auffiel ;)
|
Re: Mengentypen (set?) zur Laufzeit füttern
Bis 256 gehts sehr schnell mit Sets. Ansonsten könntest Du es mit einer Hashliste (siehe:
![]() Viele Grüße |
Re: Mengentypen (set?) zur Laufzeit füttern
Zitat:
|
Re: Mengentypen (set?) zur Laufzeit füttern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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