![]() |
Anzahl der Elemente einer Menge
Hi, wie kann ich am einfachsten die Anzahl der Elemente die in einer Menge (set of Byte) bekommen? Gibts da ne function für oder muss ich jede Zahl ausprobieren und wenn die drin ist, dann inkrementiere ich ne Zählvariable? Danke, Mr Pink
|
Re: Anzahl der Elemente einer Menge
ich denke SizeOf sollte das machen können.
mfg Matthias |
Re: Anzahl der Elemente einer Menge
Hallo,
leider gibt es in Delphi nicht jeden denkbaren Mengen-Operator. Insbesondere die Anzahl der Elemente kann nur durch Tests festgestellt werden. SizeOf() ermittelt den belegten Speicher, was zwischen einem und 32 Byte sein können, je nachdem für wieviele Elemente die Menge maximal ausgelegt ist. Durch Ausnutzung von Implementierungswissen funktioniert das hier:
Delphi-Quellcode:
Ist aber nicht wirklich zu empfehlen, da sich die Implementierung theoretisch jederzeit ändern könnte.
function MemberCount(const ASet; const ASize: Byte): Integer;
type TByteArray = array [0..31] of Byte; PByteArray = ^TByteArray; var iByte: Integer; pba: PByteArray; begin pba := @ASet; Result := 0; for iByte := 0 to Pred(ASize) do begin case pba[iByte] and 15 of 1,2,4,8: Inc(Result); 3,5,6,9,10,12: Inc(Result, 2); 7,11,13,14: Inc(Result, 3); 15: Inc(Result, 4); end; case pba[iByte] shr 4 of 1,2,4,8: Inc(Result); 3,5,6,9,10,12: Inc(Result, 2); 7,11,13,14: Inc(Result, 3); 15: Inc(Result, 4); end; end; end; procedure TMainForm.ButtonClick(Sender: TObject); begin ShowMessage(IntToStr(MemberCount(StringGrid.Options, SizeOf(StringGrid.Options)))); end; Freundliche Grüße |
Re: Anzahl der Elemente einer Menge
...ich habe es geahnt :(
naja, auf jedenfall danke dafür. |
Re: Anzahl der Elemente einer Menge
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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