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