AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Mengenoperatoren - ein kleiner Kurs
Tutorial durchsuchen
Ansicht
Themen-Optionen

Mengenoperatoren - ein kleiner Kurs

Ein Tutorial von Dax · begonnen am 31. Okt 2004 · letzter Beitrag vom 8. Mai 2005
Antwort Antwort
Seite 2 von 2     12   
Dax
Jeder Delphi-Benutzer wird in seinem Leben mindestens ein mal mit Mengen(Sets) konfrontiert. Da es für Sets auch noch andere Operatoren als in gibt und die OH zu den Mengenoperatoren fast nichts sagt, habe ich mich entschlossen, ein Tuturial über die Verwendung dieser Operatoren zu schreiben.

Punkt 1: Grundvorraussetzungen dieses Kurses

In diesem Kurs werden des öfteren Bezeichner wie X, Y, A, B, O und P fallen.
Um diese nicht bei jedem Schritt neu hinschreiben zu müssen, werden hier alle auf einmal vereinbart. Wenn es nicht anders geschrieben steht, werden wir diese Werte so benutzen, wie sie hier stehen.
Delphi-Quellcode:
A: set of Byte = [1, 3, 5, 7];
B: set of Byte = [2, 4, 6, 7];

X: set of Byte = [6];
Y: set of Byte = [7];

O: Byte = 4;
P: Byte = 7;
Punkt 2: Die Operatoren

Der Union-Operator +
Der Union-Operator ist der OR-Operator der Sets.
Er erwartet zwei Sets als Operanden und liefert ein Set als Ergebnis.
Form: Set1 + Set2: Set.
Der Opeartor ist Kommutativ, die Reihenfolge der Parameter ändert das Ergebnis nicht.
Dieser Operator liefert alle Elemente der beiden Operanden zurück, jedoch kommt kein Element im Ergebnis doppelt vor. Sollten beide Operanden leer sein, ist das Ergebnis auch leer ([]).
Demzufolge ist
Delphi-Quellcode:
X + Y = [6, 7];
A + B = [1..7];
A + Y = [1, 3, 5, 7];
B + Y = [2, 4, 6, 7];
A + X = [1, 3, 5..7];
B + X = [2, 4, 6, 7]
Der Differenzierungs-Operator -
Der Differenzierungsoperator ist das XOR der Sets.
Er erwartet zwei Sets als Operanden und liefert ein Set als Ergebnis.
Form: Set1 - Set2: Set.
Auch dieser Operator ist Antikommutativ.
Im Ergebnis dieses Operators sind nur Elemente enthalten, die nur der erste Operand enthält. Sind beide Operanden gleich, liefert der Operator das leere Set [] zurück.
Demzufolge ist
Delphi-Quellcode:
X - Y = [6, 7];
A - B = [1, 2, 3, 4, 5, 6];
A - Y = [1, 3, 5];
B - Y = [2, 4, 6];
A - X = [1, 3, 5, 7];
B - X = [2, 4, 7];
Der Intersektions-Operator *
Der Intersektionsoperator ist das AND der Sets.
Er erwartet zwei Sets als Operanden und liefert ein Set als Ergebnis.
Form: Set1 * Set2: Set.
Dieser Operator ist ebenfalls Kommutativ.
Im Ergebnis dieses Operators sind nur Elemente enthalten, die in beiden Operanden enthalten sind. Sollten die beiden Operanden kein gemeinsames Element haben, ist das Ergebnis leer ([]).
Demzufolge ist
Delphi-Quellcode:
X * Y = [];
A * B = [7];
A * Y = [7];
B * Y = [7];
A * X = [];
B * X = [6];
Der Untermengen(Subset)-Operator <=
Der Subset-Operator überprüft, ob ein Set komplett im anderen enthalten ist, und liefert ein Boolean-Ergebnis zurück.
Form: Set1 <= Set2: Boolean.
Dieser Operator ist Antikommutativ, also macht es einen Unterschied, wie die Parameter stehen.
Das Ergebnis ist true, wenn alle Elemente von Set1 in Set2 enthalten sind, ansonsten false.
Demzufolge ist
Delphi-Quellcode:
X <= Y = false;
A <= B = false;
A <= Y = false;
B <= Y = false;
A <= X = false;
B <= X = false;

Y <= X = false;
B <= A = false;
Y <= A = true;
Y <= B = false;
X <= A = false;
X <= B = true;
Der Übermengen(Superset)-Operator >=
Der Superset-Operator überprüft, ob ein Set ein anderes komplett enthält, und liefert ein Boolean-Ergebnis zurück.
Form: Set1 >= Set2: Boolean.
Dieser Operator ist auch Antikommutativ.
Das Ergebnis ist true, wenn Set1 alle Elemente von Set2 enthälz, ansonsten false.
Demzufolge ist
Delphi-Quellcode:
X >= Y = false;
A >= B = false;
A >= Y = true;
B >= Y = false;
A >= X = false;
B >= X = true;

Y >= X = false;
B >= A = false;
Y >= A = false;
Y >= B = false;
X >= A = false;
X >= B = false;
Der Vergleichsoperator =
Der Vergleichsoperator überpfrüft, ob zwei Sets keine unterschiedlichen Elemente enthalten, und liefert ein Boolean-Ergebnis zurück.
Form: Set1 = Set2: Boolean.
Das Ergebnis ist true, wenn die beiden Parameter gleich groß sind und die selben Elemente enthalten, ansonsten false.
Ich denke, Beispiele erübrigen sich hier.

Der Ungleichheitsoperator <>
Der Ungleichheitsoperator überpfrüft, ob zwei Sets nur unterschiedlichen Elemente enthalten, und liefert ein Boolean-Ergebnis zurück.
Form: Set1 <> Set2: Boolean.
Das Ergebnis ist true, wenn die beiden Parameter keine Gemeinsamen Elemente haben, ansonsten false.
Ich denke, Beispiele erübrigen sich hier.

Der in-Operator
Der in-Operator überprüft, ob ein Ordinaler Wert in einem Set enthalten ist, und liefert ein Boolean-Ergebnis.
Form: Ordinal in Set1: Boolean.
Der Ergebnis ist true, wenn Ordinal in Set1 enthalten ist, ansonsten false.
Beispiele:
Delphi-Quellcode:
O in A = false;
O in B = true;
P in A = true;
P in B = true;
5 in A = true;
5 in B = false;
Ende


Ich hoffe, hier sind die Mengenoperatoren ein wenig verständlicher erklärt worden als in der Delphi-OH, da steht ja fast gar nichts.

Edits: Tippfehler verbessert
 
Waldteufel
 
#11
  Alt 8. Mai 2005, 12:53
Hi.

Ergänzung:

Include(Menge, Objekt); fügt Objekt der Menge Menge hinzu und ist schneller als Menge := Menge + [Objekt] Exclude(Menge, Objekt); entfernt Objekt aus der Menge Menge und ist schneller als Menge := Menge - [Objekt] Siehe auch: http://www.dsdt.info/insider/sprache/includeexclude.php
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#12
  Alt 8. Mai 2005, 13:53
werde ich mal ausprobieren, danke... aber das wuste ich schon, das include einen besseren code erzeugt *G*

Und diese seltsamme fehler der kommt ?
Warum steht in Buttons auf einmal .. obwohl da eigetnlich , stehen müsste ?
Michael Springwald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:24 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