![]() |
set of integer?
ich bin seit kurzem auf folgendes gestoßen
Delphi-Quellcode:
bringen tut mir das ganze dass nur die in h2 drinnen stehen, welche in beiden Arrays vorhanden sind.
...
var h, h2: TShiftState; begin h := [ssShift, ssAlt]; h2 := h * [ssAlt]; ... nun hab ich 2 Arrays, gefüllt mit integer, und muss alle raushauen, welche nur in einem Array drinnen sind. Nun klappt das aber nicht, da ich die beiden arrays nicht multiplizieren kann. Muss ich jetzt selber ausmisten oder gibs doch noch irgendwie eine möglichkeit, diesen "Trick" zu verwenden? ich hab nun set of integer probiert, welches auch nicht geht (hab mir gedacht, weil TShiftState auf set of ist) |
Re: set of integer?
Zitat:
...:cat:... |
Re: set of integer?
Ein set of char benötigt im Speicher 256 bit = 32 Bytes.
Dies ist das grösst mögliche set, dass von Pascal oder Delphi unterstützt wird. Ein set of integer würde 2^32 bits = 512 MB im Speicher verbrauchen; das wäre doch etwas heftig. :shock: |
Re: set of integer?
Zitat:
Vielleicht akzeptiert deshalb delphi maximal 256 Elemente in einem set |
Re: set of integer?
Moin Shmia,
Zitat:
Eine Menge kann aus maximal 256 Elemente bestehen deren Wert zwischen 0 und 255 liegen muss, also belegt so ein Set maximal 256 Byte. |
Re: set of integer?
Zitat:
Das ganze kann man leicht testen, indem man ein set (mit 8 elemeten) zu einem byte casted und dann genau die binäre entsprechung haben sollte (habs mal getestet). |
Re: set of integer?
Zitat:
Delphi-Quellcode:
Beide Messageboxen sagen 32 ;)
type
TSet = set of Byte; procedure TForm1.Button1Click(Sender: TObject); var VSet: TSet; begin ShowMessage(IntToStr(SizeOf(TSet))); ShowMessage(IntToStr(SizeOf(VSet))); end; ...:cat:... |
Re: set of integer?
Zitat:
...:cat:... |
Re: set of integer?
Zitat:
wird lediglich ein Bit benötigt. Die Position des Bits gibt an, welches Element gesetzt ist. Beispiel:
Delphi-Quellcode:
type
TFarben = (rot, gruen, blau); // Aufzählungstyp mit 3 Elementen (intern als 0-2 gespeichert) TFarbenSet = Set of TFarben; // für 3 Elemente werden 3 Bit benötigt; es wird auf die nächste Byte- oder Wortgrenze aufgerundet // sizeof(TFarbenSet) gibt Auskunft var farben, farben2 : TFarbenSet; begin farben := []; // wird intern als 0b00000000 gespeichert farben := [gruen, blau, rot]; // wird intern als 0b00000111 gespeichert farben2 := [rot]; // wird intern als 0b00000001 gespeichert farben := farben + farben2; // intern wird 0b00000111 OR 0b00000001 berechnet if blau in farben then ; // intern wird berechnet: (farben AND 0b00000010) <> 0 |
Re: set of integer?
Sets sind halt nur eine elegante delphi kapselung für bit-flags und bit-masken! Genau das gleiche kann man auch AND, OR, SHL, etc. und cardinal typen erreichen, nur dann wär man auf 4 byte begrenzt!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 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