Set-UDF - Mengenoperationen in AutoIt

  • Erstmal klingt das Thema abschreckend und man fragt sich: wozu brauche ich sowas?

    Auf den zweiten Blick tauchen hier im Forum jedoch öfter Fragestellungen auf die sich mit Mengenoperationen effektiv lösen lassen.

    So sind Fragestellungen wie z.B. "alle Elemente welche sowohl in Array1 als auch in Array2 vorkommen" beispielhaft für derartige Problemstellungen.


    Diese UDF bietet daher einen Set-Datentyp und bringt die dazugehörigen mathematischen Funktionen mit (Vereinigung, Verschneidung, Differenz, symmetrische Differenz).

    Um bisschen aus der Masse hervorzustechen bietet die UDF noch eine Funktion welche komplexe Mengenalgebra-Ausdrücke wie z.B. A∪B-(B∩(A∪A)∪C) direkt auflösen kann.

    Wenn man sich bisschen von der mathematischen Theorie löst und auf die Praxis schielt wird sich für viele sicherlich eine sinnvolle Anwendung hierfür finden.

    Wie funktionierts? - hier ein großes Beispiel:

  • Sehr schöne UDF, kann ich nicht lesen oder fehlt tatsächlich ein Contain? Das wäre dann nämlich noch ganz interessant zu wissen :D

    Wenn ich mich jetzt nicht vertan habe, dann müsste das der 4 Zeiler sein:

    AutoIt
    Func _set_contains(ByRef $o_Set1, $element)
        If Not __set_IsSet($o_Set1) Then Return SetError(1)
        Return $o_Set1.Exists($element)
    EndFunc   ;==>_set_Intersect

    Anmerkung 2 : Das kann natürlich auch jeder selbst schreiben, als Einzeiler, ich dachte nur, der Vollständigkeit halber wäre eine Prüfung x ∈ M vielleicht nicht verkehrt.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    2 Mal editiert, zuletzt von Xorianator (5. Oktober 2017 um 17:23)

  • Extra Funktion ist dafür ja nicht nötig.
    Wie du selbst schriebst reicht ja einfach ein $o_Set1.Exists($element)

    Aber klar - kannste natürlich so einfügen.
    Werde die, falls jemand weiteres hinzufügt im ersten Post mit aktualisieren.

    Edit: So schlecht war die Idee gar nicht. Hab nun doch ne Funktion _set_Contain() gebastelt. Diese checkt durchaus Einzelwerte auf Existenz in der Menge.
    Zusätzlich aber auch mehrere Werte (z.B. eine andere Set oder ein Array). Damit erfüllt die Funktion auch gleichzeitig die Teilmengenabfrage A⊆B.

    Einmal editiert, zuletzt von AspirinJunkie (5. Oktober 2017 um 17:43)

  • Ah, ja, nette Idee, natürlich. Wenn man schon die Elemente wissen will, dann doch gleich die Teilmengenbeziehung. Mir kam erstmal nur das Element in den Sinn :D

    Sehr schön :)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal