F # - Sätze

Ein Satz in F # ist eine Datenstruktur, die als Sammlung von Elementen fungiert, ohne die Reihenfolge beizubehalten, in der Elemente eingefügt werden. Mit Sets können keine doppelten Einträge in die Sammlung eingefügt werden.

Sets erstellen

Sets können auf folgende Arten erstellt werden:

  • Durch Erstellen eines leeren Satzes mit Set.empty und Hinzufügen von Elementen mit der Funktion add.
  • Konvertieren von Sequenzen und Listen in Sets.

Das folgende Programm demonstriert die Techniken -

(* creating sets *)
let set1 = Set.empty.Add(3).Add(5).Add(7). Add(9)
printfn"The new set: %A" set1

let weekdays = Set.ofList ["mon"; "tues"; "wed"; "thurs"; "fri"]
printfn "The list set: %A" weekdays

let set2 = Set.ofSeq [ 1 .. 2.. 10 ]
printfn "The sequence set: %A" set2

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

The new set: set [3; 5; 7; 9]
The list set: set ["fri"; "mon"; "thurs"; "tues"; "wed"]
The sequence set: set [1; 3; 5; 7; 9]

Grundlegende Operationen an Sets

Die folgende Tabelle zeigt die grundlegenden Operationen an Sets -

Wert Beschreibung
hinzufügen: 'T → Setze <' T> → Setze <'T> Gibt eine neue Menge mit einem Element zurück, das der Menge hinzugefügt wurde. Es wird keine Ausnahme ausgelöst, wenn die Menge bereits das angegebene Element enthält.
enthält: 'T → Set <' T> → bool Evaluiert zu true wenn sich das angegebene Element in der angegebenen Menge befindet.
count: Setze <'T> → int Gibt die Anzahl der Elemente in der Menge zurück.
Unterschied: Setze <'T> → Setze <' T> → Setze <'T> Gibt eine neue Menge zurück, wobei die Elemente der zweiten Menge aus der ersten entfernt wurden.
leer: Setze <'T> Der leere Satz für den angegebenen Typ.
existiert: ('T → bool) → Setze <' T> → bool Testet, ob ein Element der Sammlung das angegebene Prädikat erfüllt. Wenn die Eingabefunktion ein Prädikat ist und die Elemente i0 ... iN sind, berechnet diese Funktion das Prädikat i0 oder ... oder das Prädikat iN.
Filter: ('T → bool) → Setze <' T> → Setze <'T> Gibt eine neue Sammlung zurück, die nur die Elemente der Sammlung enthält, für die das angegebene Prädikat zurückgegeben wird true.
fold: ('State →' T → 'State) →' State → Set <'T> →' State Wendet die angegebene Akkumulationsfunktion auf alle Elemente der Menge an.
foldBack: ('T →' Status → 'Status) → <' T> → 'Status →' Status setzen Wendet die angegebene Akkumulationsfunktion auf alle Elemente der Menge an.
forall: ('T → bool) → Setze <' T> → bool Testet, ob alle Elemente der Sammlung das angegebene Prädikat erfüllen. Wenn die Eingabefunktion p ist und die Elemente i0 ... iN sind, berechnet diese Funktion p i0 && ... && p iN.
überschneiden: Setze <'T> → Setze <' T> → Setze <'T> Berechnet den Schnittpunkt der beiden Mengen.
intersectMany: seq <Set <'T >> → Set <' T> Berechnet den Schnittpunkt einer Folge von Mengen. Die Sequenz darf nicht leer sein.
isEmpty: Setze <'T> → bool Kehrt zurück true wenn das Set leer ist.
isProperSubset: Setze <'T> → Setze <' T> → bool Evaluiert zu true wenn sich alle Elemente des ersten Satzes im zweiten befinden und mindestens ein Element des zweiten Satzes nicht im ersten ist.
isProperSuperset: Setze <'T> → Setze <' T> → bool Evaluiert zu true wenn sich alle Elemente der zweiten Menge in der ersten befinden und mindestens ein Element der ersten nicht in der zweiten ist.
isSubset: Setze <'T> → Setze <' T> → bool Evaluiert zu true wenn sich alle Elemente des ersten Satzes im zweiten befinden.
isSuperset: Setze <'T> → Setze <' T> → bool Evaluiert zu true wenn sich alle Elemente des zweiten Satzes im ersten befinden.
iter: ('T → Einheit) → Setze <' T> → Einheit Wendet die angegebene Funktion in der Reihenfolge der Vergleichsfunktion auf jedes Element der Menge an.
Karte: ('T →' U) → Setze <'T> → Setze <' U> Gibt eine neue Sammlung zurück, die die Ergebnisse der Anwendung der angegebenen Funktion auf jedes Element des Eingabesatzes enthält.
maxElement: Setze <'T> →' T. Gibt das höchste Element in der Menge gemäß der für die Menge verwendeten Reihenfolge zurück.
minElement: Setze <'T> →' T. Gibt das niedrigste Element in der Menge gemäß der für die Menge verwendeten Reihenfolge zurück.
ofArray: 'T-Array → Setze <' T> Erstellt eine Menge, die dieselben Elemente wie das angegebene Array enthält.
ofList: 'T-Liste → Setze <' T> Erstellt einen Satz, der dieselben Elemente wie die angegebene Liste enthält.
ofSeq: seq <'T> → Setze <' T> Erstellt eine neue Sammlung aus dem angegebenen aufzählbaren Objekt.
Partition: ('T → bool) → Setze <' T> → Setze <'T> * Setze <' T> Teilt die Menge in zwei Mengen auf, die die Elemente enthalten, für die das angegebene Prädikat true bzw. false zurückgibt.
entfernen: 'T → Setze <' T> → Setze <'T> Gibt eine neue Menge zurück, bei der das angegebene Element entfernt wurde. Es wird keine Ausnahme ausgelöst, wenn die Menge das angegebene Element nicht enthält.
Singleton: 'T → Setze <' T> Die Menge, die das angegebene Element enthält.
toArray: Setze <'T> →' T Array Erstellt ein Array, das die Elemente der Gruppe in der angegebenen Reihenfolge enthält.
toList: Setze <'T> →' T Liste Erstellt eine Liste, die die Elemente des Satzes der Reihe nach enthält.
toSeq: Setze <'T> → seq <' T> Gibt eine geordnete Ansicht der Sammlung als aufzählbares Objekt zurück.
Vereinigung: Setze <'T> → Setze <' T> → Setze <'T> Berechnet die Vereinigung der beiden Mengen.
unionMany: seq <Set <'T >> → Set <' T> Berechnet die Vereinigung einer Folge von Mengen.

Das folgende Beispiel zeigt die Verwendung einiger der oben genannten Funktionen -

Beispiel

let a = Set.ofSeq [ 1 ..2.. 20 ]
let b = Set.ofSeq [ 1 ..3 .. 20 ]
let c = Set.intersect a b
let d = Set.union a b
let e = Set.difference a b

printfn "Set a: "
Set.iter (fun x -> printf "%O " x) a
printfn""

printfn "Set b: "
Set.iter (fun x -> printf "%O " x) b
printfn""

printfn "Set c = set intersect of a and b : "
Set.iter (fun x -> printf "%O " x) c
printfn""

printfn "Set d = set union of a and b : "
Set.iter (fun x -> printf "%O " x) d
printfn""

printfn "Set e = set difference of a and b : "
Set.iter (fun x -> printf "%O " x) e
printfn""

Wenn Sie das Programm kompilieren und ausführen, wird die folgende Ausgabe ausgegeben:

Set a:
1 3 5 7 9 11 13 15 17 19
Set b:
1 4 7 10 13 16 19
Set c = set intersect of a and b :
1 7 13 19
Set d = set union of a and b :
1 3 4 5 7 9 10 11 13 15 16 17 19
Set e = set difference of a and b :
3 5 9 11 15 17