Einzelnen Beitrag anzeigen

Dax
(Gast)

n/a Beiträge
 
#1

Mengenoperatoren - ein kleiner Kurs

  Alt 31. Okt 2004, 14:27
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
  Mit Zitat antworten Zitat