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