AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Anzahl der Elemente in einem Set ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl der Elemente in einem Set ermitteln?

Ein Thema von DieDolly · begonnen am 14. Apr 2019 · letzter Beitrag vom 25. Apr 2019
Antwort Antwort
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Anzahl der Elemente in einem Set ermitteln?

  Alt 25. Apr 2019, 18:28
Wie ermittelt man am besten die Größe eines Sets oder die Anzahl an Elementen in einem Set?
Es geht um ein Set, welches maximal 7 Elemente aufnehmen kann. Als Bytewert ergibt das am Ende 127. Ich könnte gegen diese 127 prüfen aber es muss doch eine Möglichkeit geben zu ermitteln, wieviele Elemente in diesem Set sind oder nicht?
Wenn es wirklich schnell sein muss, dann kann man eine Tabelle anlegen mit 256 Einträge, und zwar jeweils die Anzahl an Bits des betreffenden Bytes. Dann nur noch eine Schleife über den Set, der die Bits pro Byte addiert. Oder 16 Einträge, mit der Anzahl bits für ein Nibble (halbes Byte). Egal wie, aber mit einer Lookup-Tabelle geht's schneller.

Schau mal hier (Cardinality of a Set, aus den alten Borland-Newsgroups): https://groups.google.com/forum/#!to...al/rh52jMoOOBI

Für ein bestimmtes Set von maximal 7 Werten würde ich eine 128-Byte Tabelle anlegen und dann:
Code:
    procedure Cardinality(ASet: DerSetTyp): Integer;
    const
      DieTabelle: array[0..127] of Byte =
      (
          0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, //  0..15
          1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 16..31
          1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, // 32..47
         
          // usw...

      );
    begin
      Result := DieTabelle[Byte(ASet)];
    end;
Mehr brauchst du dann nicht.
Rudy Velthuis

Geändert von Rudy Velthuis (25. Apr 2019 um 18:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 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 by Thomas Breitkreuz