Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Elemente in Mengen zählen

  Alt 17. Nov 2006, 13:02
Hier wird gezeigt, wie man die Anzahl der Elemente in einer Menge (set of) zählt:
Delphi-Quellcode:
function CountBitsSet(P: Pointer; Count: Cardinal): Cardinal;
const
  lu : packed array[0..15] of Byte = (0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);
var
  b: Byte;
begin
  Result := 0;
  while Count > 0 do
  begin
    b := PByte(P)^;
    // lower Nibble
    Inc(Result, lu[b and $0F]);
    // upper Nibble
    Inc(Result, lu[b shr 4]);

    Dec(Count);
    Inc(PByte(P));
  end;
end;
Beispiel:

Delphi-Quellcode:
type
  TMonat = (Jan, Feb, Mar, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez);
  TMonate = set of TMonat;
var
  monate : TMonate; // Die Menge
  anzahl : Cardinal;
begin
  monate := [Jan, Dez, Aug]; // mit 3 Elementen
  anzahl := CountBitsSet(@monate, sizeof(monate)); // anzahl = 3
end;
Die Arbeitsweise der Funktion CountBitsSet ist in Datenbits effektiv zählen genauer beschrieben.
Andreas
  Mit Zitat antworten Zitat