Tipi di raccolta F#

Esaminando questo argomento, è possibile determinare il tipo di raccolta F# più adatto a una particolare esigenza. Questi tipi di raccolta differiscono dai tipi di raccolta in .NET, ad esempio quelli nello spazio dei System.Collections.Generic nomi, in quanto i tipi di raccolta F# sono progettati da una prospettiva di programmazione funzionale anziché da una prospettiva orientata agli oggetti. In particolare, solo la raccolta di matrici include elementi modificabili. Pertanto, quando si modifica una raccolta, si crea un'istanza della raccolta modificata anziché modificare la raccolta originale.

I tipi di raccolta differiscono anche nel tipo di struttura di dati in cui vengono archiviati gli oggetti. Le strutture di dati, ad esempio tabelle hash, elenchi collegati e matrici, presentano caratteristiche di prestazioni diverse e un set diverso di operazioni disponibili.

Tabella dei tipi di raccolta

La tabella seguente illustra i tipi di raccolta F#.

Tipo Descrizione Collegamenti correlati
Elenco Serie ordinata e non modificabile di elementi dello stesso tipo. Implementato come elenco collegato. Elenchi

Modulo elenco
Array Raccolta modificabile a dimensione fissa, in base zero di elementi dati consecutivi che sono tutti dello stesso tipo. Matrici

Modulo array

Modulo Array2D

Modulo Array3D
Seq Serie logica di elementi che sono tutti di un tipo. Le sequenze sono particolarmente utili quando si dispone di una raccolta ordinata di dati di grandi dimensioni, ma non si prevede necessariamente di usare tutti gli elementi. I singoli elementi di sequenza vengono calcolati solo come richiesto, quindi una sequenza può ottenere prestazioni migliori rispetto a un elenco se non vengono usati tutti gli elementi. Le sequenze sono rappresentate dal seq<'T> tipo , ovvero un alias per IEnumerable<T>. Di conseguenza, qualsiasi tipo di .NET Framework che implementa System.Collections.Generic.IEnumerable<'T> può essere usato come sequenza. Sequenze

Modulo Seq
Mappa Dizionario non modificabile di elementi. Gli elementi sono accessibili tramite chiave. Modulo mappa
Set Set non modificabile basato su alberi binari, in cui il confronto è la funzione di confronto strutturale F#, che potenzialmente usa implementazioni dell'interfaccia System.IComparable sui valori chiave. Imposta modulo

Tabella delle funzioni

In questa sezione vengono confrontate le funzioni disponibili nei tipi di raccolta F#. La complessità computazionale della funzione viene data, dove N è la dimensione della prima raccolta e M è la dimensione della seconda raccolta, se presente. Un trattino (-) indica che questa funzione non è disponibile nella raccolta. Poiché le sequenze vengono valutate in modo differito, una funzione come Seq.distinct O(1) può essere O(1) perché restituisce immediatamente, anche se influisce ancora sulle prestazioni della sequenza quando viene enumerata.

Funzione Array List Sequence Mapping Set Descrizione
append O(N) O(N) O(N) - - Restituisce una nuova raccolta contenente gli elementi della prima raccolta seguita dagli elementi della seconda raccolta.
add (aggiungi) - - - O(log(N)) O(log(N)) Restituisce una nuova raccolta con l'elemento aggiunto.
average O(N) O(N) O(N) - - Restituisce la media degli elementi nell'insieme.
averageBy O(N) O(N) O(N) - - Restituisce la media dei risultati della funzione specificata applicata a ogni elemento.
blit O(N) - - - - Copia una sezione di una matrice.
cache - - O(N) - - Calcola e archivia gli elementi di una sequenza.
cast - - O(N) - - Converte gli elementi nel tipo specificato.
choose O(N) O(N) O(N) - - Applica la funzione f specificata a ogni elemento x dell'elenco. Restituisce l'elenco contenente i risultati per ogni elemento in cui la funzione restituisce Some(f(x)).
collect O(N) O(N) O(N) - - Applica la funzione specificata a ogni elemento della raccolta, concatena tutti i risultati e restituisce l'elenco combinato.
compareWith - - O(N) - - Confronta due sequenze usando la funzione di confronto specificata, elemento per elemento.
concat O(N) O(N) O(N) - - Combina l'enumerazione di enumerazione specificata come singola enumerazione concatenata.
contains - - - - O(log(N)) Restituisce true se il set contiene l'elemento specificato.
containsKey - - - O(log(N)) - Verifica se un elemento si trova nel dominio di una mappa.
numero - - - - O(N) Restituisce il numero di elementi nel set.
countBy - - O(N) - - Applica una funzione di generazione della chiave a ogni elemento di una sequenza e restituisce una sequenza che restituisce chiavi univoche e il numero di occorrenze nella sequenza originale.
copy O(N) - O(N) - - Copia l'insieme.
create O(N) - - - - Crea una matrice di elementi interi che sono tutti inizialmente il valore specificato.
delay - - O(1) - - Restituisce una sequenza compilata dalla specifica ritardata specificata di una sequenza.
differenza - - - - O(M*log(N)) Restituisce un nuovo set con gli elementi del secondo set rimosso dal primo set.
distinct O(1)* Restituisce una sequenza che non contiene voci duplicate in base a confronti di uguaglianza e hash generici sulle voci. Se un elemento si verifica più volte nella sequenza, le occorrenze successive vengono rimosse.
distinctBy O(1)* Restituisce una sequenza che non contiene voci duplicate in base all'hash generico e ai confronti di uguaglianza sulle chiavi restituite dalla funzione di generazione della chiave specificata. Se un elemento si verifica più volte nella sequenza, le occorrenze successive vengono rimosse.
empty O(1) O(1) O(1) O(1) O(1) Crea una raccolta vuota.
esiste O(N) O(N) O(N) O(log(N)) O(log(N)) Verifica se un elemento della sequenza soddisfa il predicato specificato.
exists2 O(min(N,M)) - O(min(N,M)) Verifica se una coppia di elementi corrispondenti delle sequenze di input soddisfa il predicato specificato.
riempire O(N) Imposta un intervallo di elementi della matrice sul valore specificato.
filter O(N) O(N) O(N) O(N) O(N) Restituisce una nuova raccolta contenente solo gli elementi dell'insieme per cui il predicato specificato restituisce true.
find O(N) O(N) O(N) O(log(N)) - Restituisce il primo elemento per il quale la funzione specificata restituisce true. Restituisce System.Collections.Generic.KeyNotFoundException se non esiste alcun elemento di questo tipo.
findIndex O(N) O(N) O(N) - - Restituisce l'indice del primo elemento nella matrice che soddisfa il predicato specificato. Genera System.Collections.Generic.KeyNotFoundException se nessun elemento soddisfa il predicato.
findKey - - - O(log(N)) - Valuta la funzione in ogni mapping della raccolta e restituisce la chiave per il primo mapping in cui la funzione restituisce true. Se non esiste alcun elemento di questo tipo, questa funzione genera System.Collections.Generic.KeyNotFoundException.
Piegare O(N) O(N) O(N) O(N) O(N) Applica una funzione a ogni elemento della raccolta, threading di un argomento enumeratore tramite il calcolo. Se la funzione di input è f e gli elementi sono i0... iN, questa funzione calcola f (... (f s i0)...) Pollici.
piega2 O(N) O(N) - - - Applica una funzione agli elementi corrispondenti di due raccolte, threading di un argomento enumeratore tramite il calcolo. Le raccolte devono avere dimensioni identiche. Se la funzione di input è f e gli elementi sono i0... iN e j0... jN, questa funzione calcola f (... (f s i0 j0)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Applica una funzione a ogni elemento della raccolta, threading di un argomento enumeratore tramite il calcolo. Se la funzione di input è f e gli elementi sono i0... iN, questa funzione calcola f i0 (... (f iN s)).
foldBack2 O(N) O(N) - - - Applica una funzione agli elementi corrispondenti di due raccolte, threading di un argomento enumeratore tramite il calcolo. Le raccolte devono avere dimensioni identiche. Se la funzione di input è f e gli elementi sono i0... iN e j0... jN, questa funzione calcola f i0 j0 (... (f iN jN s)).
forall O(N) O(N) O(N) O(N) O(N) Verifica se tutti gli elementi della raccolta soddisfano il predicato specificato.
forall2 O(N) O(N) O(N) - - Verifica se tutti gli elementi corrispondenti della raccolta soddisfano il predicato specificato in modo pairwise.
get/nth O(1) O(N) O(N) - - Restituisce un elemento dall'insieme in base al relativo indice.
head - O(1) O(1) - - Restituisce il primo elemento della raccolta.
init O(N) O(N) O(1) - - Crea una raccolta in base alla dimensione e a una funzione generatore per calcolare gli elementi.
initInfinite - - O(1) - - Genera una sequenza che, quando viene eseguita l'iterazione, restituisce elementi successivi chiamando la funzione specificata.
intersecazione - - - - O(log(N)*log(M)) Calcola l'intersezione di due set.
intersectMany - - - - O(N1*N2...) Calcola l'intersezione di una sequenza di set. La sequenza non deve essere vuota.
isEmpty O(1) O(1) O(1) O(1) - Restituisce true se l'insieme è vuoto.
isProperSubset - - - - O(M*log(N)) Restituisce true se tutti gli elementi del primo set si trovano nel secondo set e almeno un elemento del secondo set non si trova nel primo set.
isProperSuperset - - - - O(M*log(N)) Restituisce true se tutti gli elementi del secondo set si trovano nel primo set e almeno un elemento del primo set non si trova nel secondo set.
isSubset - - - - O(M*log(N)) Restituisce true se tutti gli elementi del primo set si trovano nel secondo set.
isSuperset - - - - O(M*log(N)) Restituisce true se tutti gli elementi del secondo set si trovano nel primo set.
Iter O(N) O(N) O(N) O(N) O(N) Applica la funzione specificata a ogni elemento della raccolta.
iteri O(N) O(N) O(N) - - Applica la funzione specificata a ogni elemento della raccolta. L'intero passato alla funzione indica l'indice dell'elemento.
iteri2 O(N) O(N) - - - Applica la funzione specificata a una coppia di elementi disegnati da indici corrispondenti in due matrici. L'intero passato alla funzione indica l'indice degli elementi. Le due matrici devono avere la stessa lunghezza.
iter2 O(N) O(N) O(N) - - Applica la funzione specificata a una coppia di elementi disegnati da indici corrispondenti in due matrici. Le due matrici devono avere la stessa lunghezza.
ultimo O(1) O(N) O(N) - - Restituisce l'ultimo elemento della raccolta applicabile.
length O(1) O(N) O(N) - - Restituisce il numero di elementi nell'insieme.
mappa O(N) O(N) O(1) - - Compila una raccolta i cui elementi sono i risultati dell'applicazione della funzione specificata a ogni elemento della matrice.
map2 O(N) O(N) O(1) - - Compila una raccolta i cui elementi sono i risultati dell'applicazione della funzione specificata agli elementi corrispondenti delle due raccolte in modo pairwise. Le due matrici di input devono avere la stessa lunghezza.
map3 - O(N) - - - Compila una raccolta i cui elementi sono i risultati dell'applicazione della funzione specificata agli elementi corrispondenti delle tre raccolte contemporaneamente.
Mapi O(N) O(N) O(N) - - Compila una matrice i cui elementi sono i risultati dell'applicazione della funzione specificata a ogni elemento della matrice. L'indice integer passato alla funzione indica l'indice dell'elemento da trasformare.
mapi2 O(N) O(N) - - - Compila una raccolta i cui elementi sono i risultati dell'applicazione della funzione specificata agli elementi corrispondenti delle due raccolte in modo pairwise, passando anche l'indice degli elementi. Le due matrici di input devono avere la stessa lunghezza.
max O(N) O(N) O(N) - - Restituisce l'elemento più grande dell'insieme, confrontato utilizzando l'operatore max .
maxBy O(N) O(N) O(N) - - Restituisce l'elemento più grande della raccolta, confrontato utilizzando max sul risultato della funzione.
maxElement - - - - O(log(N)) Restituisce l'elemento più grande del set in base all'ordinamento utilizzato per il set.
min O(N) O(N) O(N) - - Restituisce l'elemento minimo nella raccolta, confrontato utilizzando l'operatore min .
minBy O(N) O(N) O(N) - - Restituisce l'elemento minimo nella raccolta, confrontato utilizzando l'operatore min sul risultato della funzione.
minElement - - - - O(log(N)) Restituisce l'elemento più basso del set in base all'ordinamento utilizzato per il set.
ofArray - O(N) O(1) O(N) O(N) Crea una raccolta contenente gli stessi elementi della matrice specificata.
ofList O(N) - O(1) O(N) O(N) Crea una raccolta che contiene gli stessi elementi dell'elenco specificato.
ofSeq O(N) O(N) - O(N) O(N) Crea una raccolta che contiene gli stessi elementi della sequenza specificata.
Pairwise - - O(N) - - Restituisce una sequenza di ogni elemento nella sequenza di input e il relativo predecessore, ad eccezione del primo elemento, restituito solo come predecessore del secondo elemento.
denominata O(N) O(N) - O(N) O(N) Suddivide la raccolta in due raccolte. La prima raccolta contiene gli elementi per i quali il predicato specificato restituisce truee la seconda raccolta contiene gli elementi per i quali il predicato specificato restituisce false.
permute O(N) O(N) - - - Restituisce una matrice con tutti gli elementi permutati in base alla permutazione specificata.
Scegliere O(N) O(N) O(N) O(log(N)) - Applica la funzione specificata agli elementi successivi, restituendo il primo risultato in cui la funzione restituisce Some. Se la funzione non restituisce mai Some, System.Collections.Generic.KeyNotFoundException viene generata.
readonly - - O(N) - - Crea un oggetto sequenza che delega all'oggetto sequenza specificato. Questa operazione garantisce che un cast di tipo non possa ritrovare e modificare la sequenza originale. Ad esempio, se viene specificata una matrice, la sequenza restituita restituirà gli elementi della matrice, ma non è possibile eseguire il cast dell'oggetto sequenza restituito a una matrice.
reduce O(N) O(N) O(N) - - Applica una funzione a ogni elemento della raccolta, threading di un argomento enumeratore tramite il calcolo. Questa funzione inizia applicando la funzione ai primi due elementi, passa questo risultato alla funzione insieme al terzo elemento e così via. La funzione restituisce il risultato finale.
reduceBack O(N) O(N) - - - Applica una funzione a ogni elemento della raccolta, threading di un argomento enumeratore tramite il calcolo. Se la funzione di input è f e gli elementi sono i0... iN, questa funzione calcola f i0 (... (f iN-1 iN)).
remove - - - O(log(N)) O(log(N)) Rimuove un elemento dal dominio della mappa. Se l'elemento non è presente, non viene generata alcuna eccezione.
Replicare - O(N) - - - Crea un elenco di lunghezza specificata con ogni elemento impostato sul valore specificato.
Rev O(N) O(N) - - - Restituisce un nuovo elenco con gli elementi in ordine inverso.
scan O(N) O(N) O(N) - - Applica una funzione a ogni elemento della raccolta, threading di un argomento enumeratore tramite il calcolo. Questa operazione applica la funzione al secondo argomento e al primo elemento dell'elenco. L'operazione passa quindi questo risultato alla funzione insieme al secondo elemento e così via. Infine, l'operazione restituisce l'elenco dei risultati intermedi e il risultato finale.
scanBack O(N) O(N) - - - È simile all'operazione foldBack, ma restituisce i risultati intermedi e finali.
singleton - - O(1) - O(1) Restituisce una sequenza che restituisce un solo elemento.
set O(1) - - - - Imposta un elemento di una matrice sul valore specificato.
skip - - O(N) - - Restituisce una sequenza che ignora N elementi della sequenza sottostante e quindi restituisce gli elementi rimanenti della sequenza.
skipWhile - - O(N) - - Restituisce una sequenza che, durante l'iterazione, ignora gli elementi della sequenza sottostante mentre il predicato specificato restituisce true e quindi restituisce gli elementi rimanenti della sequenza.
ordinamento Media O(N*log(N))

O(N^2) caso peggiore
O(N*log(N)) O(N*log(N)) - - Ordina la raccolta in base al valore dell'elemento. Gli elementi vengono confrontati usando compare.
sortBy Media O(N*log(N))

O(N^2) caso peggiore
O(N*log(N)) O(N*log(N)) - - Ordina l'elenco specificato usando le chiavi fornite dalla proiezione specificata. Le chiavi vengono confrontate usando compare.
sortInPlace Media O(N*log(N))

O(N^2) caso peggiore
- - - - Ordina gli elementi di una matrice modificandola sul posto e usando la funzione di confronto specificata. Gli elementi vengono confrontati usando compare.
sortInPlaceBy Media O(N*log(N))

O(N^2) caso peggiore
- - - - Ordina gli elementi di una matrice modificandola sul posto e usando la proiezione specificata per le chiavi. Gli elementi vengono confrontati usando compare.
sortInPlaceWith Media O(N*log(N))

O(N^2) caso peggiore
- - - - Ordina gli elementi di una matrice modificandola sul posto e usando la funzione di confronto specificata come ordine.
sortWith Media O(N*log(N))

O(N^2) caso peggiore
O(N*log(N)) - - - Ordina gli elementi di una raccolta, utilizzando la funzione di confronto specificata come ordine e restituendo una nuova raccolta.
secondario O(N) - - - - Compila una matrice che contiene l'intervallo secondario specificato dall'indice iniziale e dalla lunghezza.
somma O(N) O(N) O(N) - - Restituisce la somma degli elementi dell'insieme.
sumBy O(N) O(N) O(N) - - Restituisce la somma dei risultati generati applicando la funzione a ogni elemento della raccolta.
coda - O(1) - - - Restituisce l'elenco senza il primo elemento.
take - - O(N) - - Restituisce gli elementi della sequenza fino a un conteggio specificato.
takeWhile - - O(1) - - Restituisce una sequenza che, quando viene eseguita l'iterazione, restituisce elementi della sequenza sottostante mentre il predicato specificato restituisce true e quindi non restituisce altri elementi.
Toarray - O(N) O(N) O(N) O(N) Crea una matrice dalla raccolta specificata.
Tolist O(N) - O(N) O(N) O(N) Crea un elenco dalla raccolta specificata.
toSeq O(1) O(1) - O(1) O(1) Crea una sequenza dalla raccolta specificata.
truncate - - O(1) - - Restituisce una sequenza che, se enumerata, non restituisce più di N elementi.
tryFind O(N) O(N) O(N) O(log(N)) - Cerca un elemento che soddisfa un predicato specificato.
tryFindIndex O(N) O(N) O(N) - - Cerca il primo elemento che soddisfa un predicato specificato e restituisce l'indice dell'elemento corrispondente oppure None se tale elemento non esiste.
tryFindKey - - - O(log(N)) - Restituisce la chiave del primo mapping nell'insieme che soddisfa il predicato specificato oppure restituisce None se tale elemento non esiste.
tryPick O(N) O(N) O(N) O(log(N)) - Applica la funzione specificata agli elementi successivi, restituendo il primo risultato in cui la funzione restituisce Some per un valore. Se non esiste alcun elemento di questo tipo, l'operazione restituisce None.
Spiegare - - O(N) - - Restituisce una sequenza contenente gli elementi generati dal calcolo specificato.
union - - - - O(M*log(N)) Calcola l'unione dei due set.
unionMany - - - - O(N1*N2...) Calcola l'unione di una sequenza di set.
unzip O(N) O(N) O(N) - - Suddivide un elenco di coppie in due elenchi.
decomprimere3 O(N) O(N) O(N) - - Suddivide un elenco di triple in tre elenchi.
DStream - - O(N) - - Restituisce una sequenza che produce finestre scorrevoli di elementi che vengono disegnati dalla sequenza di input. Ogni finestra viene restituita come matrice aggiornata.
zip O(N) O(N) O(N) - - Combina le due raccolte in un elenco di coppie. I due elenchi devono avere lunghezze uguali.
zip3 O(N) O(N) O(N) - - Combina le tre raccolte in un elenco di triple. Gli elenchi devono avere una lunghezza uguale.

Vedi anche