AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

set of integer?

Ein Thema von Skiron · begonnen am 15. Apr 2004 · letzter Beitrag vom 15. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#1

set of integer?

  Alt 15. Apr 2004, 16:00
ich bin seit kurzem auf folgendes gestoßen
Delphi-Quellcode:
...
var
  h, h2: TShiftState;
begin
  h := [ssShift, ssAlt];
  h2 := h * [ssAlt];
...
bringen tut mir das ganze dass nur die in h2 drinnen stehen, welche in beiden Arrays vorhanden sind.

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)
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: set of integer?

  Alt 15. Apr 2004, 16:13
Zitat von Skiron:
Muss ich jetzt selber ausmisten oder gibs doch noch irgendwie eine möglichkeit, diesen "Trick" zu verwenden?
Das "ausmisten" geht nur bei Sets, bei Arrays musst Du selber Hand anlegen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
shmia

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

Re: set of integer?

  Alt 15. Apr 2004, 16:19
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.
Andreas
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#4

Re: set of integer?

  Alt 15. Apr 2004, 16:23
Zitat von shmia:
Ein set of integer würde 2^32 bits = 512 MB im Speicher verbrauchen;
das wäre doch etwas heftig
Stimmt, irgendwie auch richtig
Vielleicht akzeptiert deshalb delphi maximal 256 Elemente in einem set
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: set of integer?

  Alt 15. Apr 2004, 16:26
Moin Shmia,

Zitat von shmia:
Ein set of char benötigt im Speicher 256 bit = 32 Bytes.
woher hast Du denn das?

Eine Menge kann aus maximal 256 Elemente bestehen deren Wert zwischen 0 und 255 liegen muss, also belegt so ein Set maximal 256 Byte.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#6

Re: set of integer?

  Alt 15. Apr 2004, 16:49
Zitat von Christian Seehase:
Eine Menge kann aus maximal 256 Elemente bestehen deren Wert zwischen 0 und 255 liegen muss, also belegt so ein Set maximal 256 Byte.
Ja und nein! Da ein element einem bit entspricht ist die maximale grösse eben doch 32 byte, oder 256 bit. Das ist ja auch logisch, da ein element in einem set ja immer nur true oder false sein kann und nicht von 0 bis 256

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).
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: set of integer?

  Alt 15. Apr 2004, 16:50
Zitat von Christian Seehase:
woher hast Du denn das?
Ist doch eigentlich egal, oder; Hauptsache korrekt

Delphi-Quellcode:
type
  TSet = set of Byte;

procedure TForm1.Button1Click(Sender: TObject);
var
  VSet: TSet;
begin
  ShowMessage(IntToStr(SizeOf(TSet)));
  ShowMessage(IntToStr(SizeOf(VSet)));
end;
Beide Messageboxen sagen 32

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: set of integer?

  Alt 15. Apr 2004, 16:52
Zitat von Christian Seehase:
Eine Menge kann aus maximal 256 Elemente bestehen deren Wert zwischen 0 und 255 liegen muss, also belegt so ein Set maximal 256 Byte.
Noch mehr Theorie - deren Werte sind zwar von 0 bis 255, aber im Set unter Delphi immer mit 0 startend durchnummeriert. Damit ist klar, daß Bits ausreichen, um das Vorhandensein eines Wertes festzustellen. Ein Wert kann ja auch nur entweder gar nicht oder genau einmal vorkommen - damit reicht ein einzelnes Bit weiterhin

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
shmia

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

Re: set of integer?

  Alt 15. Apr 2004, 16:52
Zitat von Christian Seehase:
Zitat von shmia:
Ein set of char benötigt im Speicher 256 bit = 32 Bytes.
woher hast Du denn das?
Eine Menge kann aus maximal 256 Elemente bestehen deren Wert zwischen 0 und 255 liegen muss, also belegt so ein Set maximal 256 Byte.
Zum Speichern der Information, ob ein Element in einer Menge enthalten ist oder nicht,
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: set of integer?

  Alt 15. Apr 2004, 16:56
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!
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:27 Uhr.
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