prevnext   » Startseite » Haupt-Referenz » Funktions-Referenz » m$operation(), mapOperation()

m$operation(), mapOperation()

Operationen mit Mengen, bei denen Elemente Werte besitzen.

Syntax:

int32 m$operation ( map1_var, map2, op_mode )
map mapOperation ( map1, map2, op_mode )

Parameter:

map1_var Die Funktion m$operation erwartetet (wie alle m$*() Funktionen) als ersten Parameter eine Referenz auf eine (ggf. indizierte) Variable. Diese Variable wird identisch zu map() zwangsweise in eine Map gewandelt, um anschließend modifiziert zu werden.

Der Inhalt der Variable map1_var wird nicht auf den Stack kopiert. Stattdessen wird direkt und damit effizient auf den Inhalt der Variable zugegriffen.

map1 Die erste Quell-Menge.
map2 Die zweite Quell-Menge.
op_mode Einer der unten definierten Operations-Modi.

Beschreibung:

Die beiden Funktionen m$operation() und mapOperation() führen Operationen mit Mengen (englisch: 'set') aus. Die eigentliche Operation wird durch einen Modus festgelegt, der hier beschrieben wird.

Zuerst soll untersucht werden, welche Möglichkeiten der Mengenverknüpfung existieren. Werden zwei Mengen M1 und M2 verknüpft, so ergeben sich für jedes einzelne Element vier Möglichkeiten:

  1. Das Element ist weder in M1 noch in B.

    Es gibt nur eine Möglichkeit: Ein unbekanntes Element kann nie in die Ergebnismenge aufgenommen werden.

  2. Das Element befindet sich in M1, aber nicht in M2.

    Es gibt zwei Möglichkeiten: Das Element wird mit dem zugehörigen Wert in die Ergebnismenge aufgenommen oder es wird ignoriert.

  3. Das Element befindet sich in M2, aber nicht in M1.

    Es gibt zwei Möglichkeiten: Das Element wird mit dem zugehörigen Wert in die Ergebnismenge aufgenommen oder es wird ignoriert.

  4. Das Element befindet sich in M1 und in M2.

    Es gibt drei Möglichkeiten: Das Element wird mit dem zugehörigen Wert aus der Menge M1 oder mit dem zugehörigen Wert aus der Menge M2 in die Ergebnismenge aufgenommen oder es wird ignoriert.

Es existieren also 1*2*2*3 == 12 Möglichkeiten, wie zwei Mengen zu einer Ergebnismenge kombiniert werden können. Diese zwölf Möglichkeiten sind durch die folgenden Konstanten festgelegt, von denen einer dem Parameter op_mode übergeben werden muss:

Die Werte der obigen zwölf Konstanten sind so gewählt, das die folgenden Konstanten jeweils ein Bit mit einer speziellen Bedeutung repräsentieren:

Die folgende Tabelle zeigt, wie zwei Mengen je nach Operations-Modus verknüpft werden:

Beispiele
m1 m2 op m$operation(m1,m2,op)m1
["A"=1,"X"=1] ["B"=2,"X"=2] 0x00 = _SET_CLEAR
["A"=1,"X"=1] ["B"=2,"X"=2] 0x01 = _SET_EXCLUSIVE_1 ["A"=1]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x02 = _SET_EXCLUSIVE_2 ["B"=2]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x03 = _SET_EXCLUSIVE ["A"=1,"B"=2]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x04 = _SET_AND_1 ["X"=1]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x05 = _SET_COPY_1 ["A"=1,"X"=1]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x06 = _SET_REPLACE_2_BY_1 ["B"=2,"X"=1]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x07 = _SET_OR_1 ["A"=1,"B"=2,"X"=1]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x0c = _SET_AND_2 ["X"=2]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x0d = _SET_REPLACE_1_BY_2 ["A"=1,"X"=2]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x0e = _SET_COPY_2 ["B"=2,"X"=2]
["A"=1,"X"=1] ["B"=2,"X"=2] 0x0f = _SET_OR_2 ["A"=1,"B"=2,"X"=2]

Funktionsergebnis:   INT32/MAP

Die Funktion m$operation() liefert die Anzahl der Elemente in der Ergebnismenge map1_var als Funktionsergebnis.

Die Funktion mapOperation() liefert die Ergebnismenge als Funktionsergebnis.

Weitere ähnliche Funktionen:

Maps
Funktion Kurzinfo
catMap()
flatList() Die komplette Listen- und/oder Map-Struktur in eine flache Liste überführen.
isMap() Test, ob eine Variable mit gegebenen oder errechnetem Namen existiert und vom Typ MAP ist.
keyMap()
len() Die Anzahl der Zeichen einer Zeichenkette bzw. die Anzahl der Elemente einer Liste oder einer Map bestimmen.
length() Die Anzahl der Zeichen einer Zeichenkette bzw. die Anzahl der Elemente einer Liste oder einer Map bestimmen.
m$cat()
m$clear()
m$exist()
m$find2() Ein Element in einer Map oder ersatzweise die virtuellen Nachbarn suchen.
m$find3() Ein Element in einer Map und seine virtuellen Nachbarn suchen.
m$findKeys()
m$findKeysBegin()
m$findKeysEnd()
m$findKeysPCRE()
m$findKeysRE()
m$findNext() Den Nachfolger in einer Map zu einem gegebenen Schlüssel finden.
m$findPrev() Den Vorgänger in einer Map zu einem gegebenen Schlüssel finden.
m$keys()
m$length() Die Anzahl der Elemente einer Map bestimmen.
m$map()
m$operation() Operationen mit Mengen, bei denen Elemente Werte besitzen.
m$pack()
m$purge()
m$size()
map()
mapOperation() Operationen mit Mengen, bei denen Elemente Werte besitzen.