F # - Serie

Un set in F # è una struttura dati che funge da raccolta di elementi senza mantenere l'ordine in cui vengono inseriti gli elementi. I set non consentono l'inserimento di voci duplicate nella raccolta.

Creazione di set

I set possono essere creati nei seguenti modi:

  • Creando un set vuoto utilizzando Set.empty e aggiungendo elementi utilizzando la funzione di aggiunta.
  • Conversione di sequenze ed elenchi in insiemi.

Il seguente programma mostra le tecniche:

(* 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

Quando compili ed esegui il programma, restituisce il seguente output:

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]

Operazioni di base sui set

La tabella seguente mostra le operazioni di base sui set:

Valore Descrizione
aggiungi: 'T → Set <' T> → Set <'T> Restituisce un nuovo set con un elemento aggiunto al set. Non viene sollevata alcuna eccezione se l'insieme contiene già l'elemento specificato.
contiene: 'T → Set <' T> → bool Valuta a true se l'elemento dato è nell'insieme dato.
count: Set <'T> → int Restituisce il numero di elementi nell'insieme.
differenza: Imposta <'T> → Imposta <' T> → Imposta <'T> Restituisce un nuovo set con gli elementi del secondo set rimossi dal primo.
vuoto: imposta <'T> Il set vuoto per il tipo specificato.
esiste: ('T → bool) → Set <' T> → bool Verifica se qualsiasi elemento della raccolta soddisfa il predicato specificato. Se la funzione di input è predicato e gli elementi sono i0 ... iN, questa funzione calcola il predicato i0 o ... o il predicato iN.
filtro: ('T → bool) → Set <' T> → Set <'T> Restituisce una nuova raccolta contenente solo gli elementi della raccolta per cui restituisce il predicato specificato true.
fold: ('State →' T → 'State) →' State → Set <'T> →' State Applica la funzione di accumulazione data a tutti gli elementi dell'insieme.
foldBack: ('T →' State → 'State) → Set <' T> → 'State →' State Applica la funzione di accumulazione data a tutti gli elementi dell'insieme.
forall: ('T → bool) → Set <' T> → bool Verifica se tutti gli elementi della raccolta soddisfano il predicato specificato. Se la funzione di input è p e gli elementi sono i0 ... iN, questa funzione calcola p i0 && ... && p iN.
intersecare: Imposta <'T> → Imposta <' T> → Imposta <'T> Calcola l'intersezione dei due insiemi.
intersectMany: seq <Set <'T >> → Set <' T> Calcola l'intersezione di una sequenza di insiemi. La sequenza non deve essere vuota.
isEmpty: Set <'T> → bool ritorna true se il set è vuoto.
isProperSubset: Set <'T> → Set <' T> → bool Valuta a true se tutti gli elementi del primo insieme sono nel secondo e almeno un elemento del secondo non è nel primo.
isProperSuperset: Set <'T> → Set <' T> → bool Valuta a true se tutti gli elementi del secondo insieme sono nel primo e almeno un elemento del primo non è nel secondo.
isSubset: Set <'T> → Set <' T> → bool Valuta a true se tutti gli elementi del primo insieme sono nel secondo.
isSuperset: Set <'T> → Set <' T> → bool Valuta a true se tutti gli elementi del secondo insieme sono nel primo.
iter: ('T → unit) → Set <' T> → unit Applica la funzione data a ciascun elemento dell'insieme, in ordine in base alla funzione di confronto.
mappa: ('T →' U) → Imposta <'T> → Imposta <' U> Restituisce una nuova raccolta contenente i risultati dell'applicazione della funzione data a ciascun elemento del set di input.
maxElement: Set <'T> →' T Restituisce l'elemento più alto nel set in base all'ordine utilizzato per il set.
minElement: Set <'T> →' T Restituisce l'elemento più basso nel set in base all'ordine utilizzato per il set.
ofArray: 'T array → Imposta <' T> Crea un set che contiene gli stessi elementi dell'array specificato.
ofList: 'T list → Imposta <' T> Crea un insieme che contiene gli stessi elementi dell'elenco fornito.
ofSeq: seq <'T> → Imposta <' T> Crea una nuova raccolta dall'oggetto enumerabile specificato.
partizione: ('T → bool) → Set <' T> → Set <'T> * Set <' T> Divide l'insieme in due insiemi contenenti gli elementi per i quali il predicato dato restituisce rispettivamente vero e falso.
rimuovere: 'T → Set <' T> → Set <'T> Restituisce un nuovo set con l'elemento specificato rimosso. Non viene sollevata alcuna eccezione se l'insieme non contiene l'elemento dato.
singleton: 'T → Set <' T> L'insieme contenente l'elemento dato.
toArray: Imposta <'T> →' T array Crea un array che contiene gli elementi dell'insieme in ordine.
toList: Imposta <'T> →' T list Crea un elenco che contiene gli elementi dell'insieme in ordine.
toSeq: Imposta <'T> → seq <' T> Restituisce una visualizzazione ordinata della raccolta come oggetto enumerabile.
unione: Set <'T> → Set <' T> → Set <'T> Calcola l'unione dei due insiemi.
unionMany: seq <Set <'T >> → Set <' T> Calcola l'unione di una sequenza di insiemi.

L'esempio seguente mostra gli usi di alcune delle funzionalità di cui sopra:

Esempio

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""

Quando compili ed esegui il programma, restituisce il seguente output:

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