Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Im Array besonders schnell suchen??? (https://www.delphipraxis.net/135843-im-array-besonders-schnell-suchen.html)

romber 18. Jun 2009 18:48


Im Array besonders schnell suchen???
 
Hallo!

Ich habe für meine Zwecke einen neuen Typ definiert und jeder Variante zusätzlich eine Zahl zugewiesen.

Delphi-Quellcode:
type TMeinTyp = (mtVariante1 = 1,
                         mtVariante2 = 15,
                         mtVariante3 = 35,
                         ...
                         mtVariante25 = 455);
Am liebsten würde ich einen Set erstellen, der dann mehrere Varianten enthält. Ich könnte dann ganz einfach und schnell mit "if in set" prüfen, ob eine bestimmte Variante drin ist. Das problem ist, dass ein Set maximal 256 Elemente besitzen kann. Und obwohl ich nur 25 potenzielle Elemente habe, ist ein Set in meinem Fall nicht möglich, weil Integerwerte einiger Varianten über 256 liegen.

Mit bleibt wohl nichts anderes, als ein Array zu erstellen. Wie kann ich besonders schnell und resourcensparend überprüfen, ob sich ein Wert im Array befindet?

Apollonius 18. Jun 2009 18:50

Re: Im Array besonders schnell suchen???
 
Mittlerweile gibt es in der Unit Classes die Klasse TBits, die einen Bitvektor beliebiger Länge darstellt. Ich weiß allerdings nicht, ab welcher Delphi-Version sie vorhanden ist.

jfheins 18. Jun 2009 18:56

Re: Im Array besonders schnell suchen???
 
Du könntest entweder ein Array wie folgt deklarieren:

Array[TMeinTyp] of Boolean;

Sozusagen ein selfmade-Set - prüfen kannst du dann schnell, indem du den Boolean-wert checkst ;)

romber 18. Jun 2009 18:57

Re: Im Array besonders schnell suchen???
 
Danke für die schnelle Antwort!

Und wie hilft mir diese Klasse?

romber 18. Jun 2009 18:59

Re: Im Array besonders schnell suchen???
 
Zitat:

Zitat von jfheins
Du könntest entweder ein Array wie folgt deklarieren:

Array[TMeinTyp] of Boolean;

Sozusagen ein selfmade-Set - prüfen kannst du dann schnell, indem du den Boolean-wert checkst ;)

Das habe ich jetzt ein bisschen nicht verstanden. Wie kann ich in diesem Fall prüfen, ob z.B. mtVariante2 im Array ist?

thkerkmann 18. Jun 2009 19:08

Re: Im Array besonders schnell suchen???
 
Zitat:

Zitat von romber
Hallo!

Ich habe für meine Zwecke einen neuen Typ definiert und jeder Variante zusätzlich eine Zahl zugewiesen.

Delphi-Quellcode:
type TMeinTyp = (mtVariante1 = 1,
                         mtVariante2 = 15,
                         mtVariante3 = 35,
                         ...
                         mtVariante25 = 455);
Am liebsten würde ich einen Set erstellen, der dann mehrere Varianten enthält. Ich könnte dann ganz einfach und schnell mit "if in set" prüfen, ob eine bestimmte Variante drin ist. Das problem ist, dass ein Set maximal 256 Elemente besitzen kann. Und obwohl ich nur 25 potenzielle Elemente habe, ist ein Set in meinem Fall nicht möglich, weil Integerwerte einiger Varianten über 256 liegen.

Mit bleibt wohl nichts anderes, als ein Array zu erstellen. Wie kann ich besonders schnell und resourcensparend überprüfen, ob sich ein Wert im Array befindet?

Du solltest dir ein Set und ein Lookup array erstellen.
Delphi-Quellcode:
  type
    TMeinTyp = (mtVariante1, mtVariante2, mtVariante3,... mtVariante25);
  const
    cMeinTypOrdinal: array[TMeinTyp] of integer = (1,15,35,...455);
dann kannst du ein Set erstellen, um die Varianten zu speichern und wenn Du deren Ordinalwert benötigst greifst Du auf das Lookuparray zu.

Gruss

Satty67 18. Jun 2009 19:25

Re: Im Array besonders schnell suchen???
 
[OT]Wenn ich das LookUp-Array sehe, muss ich an den Design-Fehler von QuickReport denken.[/OT]

Apollonius 18. Jun 2009 19:27

Re: Im Array besonders schnell suchen???
 
Zitat:

Zitat von romber
Danke für die schnelle Antwort!

Und wie hilft mir diese Klasse?

Nun, ein Set ist letztlich auch nur ein Bitvektor. Um ein Element zum Set hinzuzufügen, setzt du das Bit mit der Position Cardinal(Element) und anstatt des in-Operators prüfst du den Status des Bits.

Satty67 18. Jun 2009 19:31

Re: Im Array besonders schnell suchen???
 
Da seine Mengen-Elemente aber Unterschiedliche Werte haben (die er wohl braucht), wird er um ein LockUp-Array auch nicht rum kommen. Da kann er es einfacher lösen, wie thkerkmann vorgeschlagen hat.

Apollonius 18. Jun 2009 19:35

Re: Im Array besonders schnell suchen???
 
Diesen Gedankengang verstehe ich nicht ganz.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
Seite 1 von 2  1 2      

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