Condividi tramite


Tipi di raccolta F#

Analizzando 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 nomi System.Collections.Generic, 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 collezione F#.

Tipo Descrizione Collegamenti correlati
Elenco Serie ordinata e non modificabile di elementi dello stesso tipo. Implementato come lista collegata. elenchi

Modulo Elenco
matrice Raccolta modificabile a dimensione fissa, basata su zero, di elementi dati consecutivi che sono tutti dello stesso tipo. matrici

modulo array

modulo Array2D

modulo Array3D
sequenza 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 tipo seq<'T>, ovvero un alias per IEnumerable<T>. Pertanto, 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
Imposta 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. set di moduli

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 può essere O(1) perché restituisce immediatamente, anche se influisce ancora sulle prestazioni della sequenza quando viene enumerata.

Funzione Array Lista Sequenza Mappa Mettere Descrizione
aggiungere O(N) O(N) O(N) - - Restituisce una nuova raccolta contenente gli elementi della prima raccolta seguita dagli elementi della seconda raccolta.
Aggiungere - - - O(log(N)) O(log(N)) Restituisce una nuova raccolta in cui è stato aggiunto l'elemento.
Medio 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.
gettare - - O(N) - - Converte gli elementi nel tipo specificato.
scegliere O(N) O(N) O(N) - - Applica la funzione specificata f a ogni elemento x dell'elenco. Restituisce l'elenco contenente i risultati per ogni elemento in cui la funzione restituisce Some(f(x)).
raccogliere 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 le enumerazioni delle enumerazioni specificate in un'unica enumerazione concatenata.
Contiene - - - - O(log(N)) Restituisce true se il set contiene l'elemento specificato.
contieneChiave - - - O(log(N)) - Verifica se un elemento si trova nel dominio di una mappa.
contare - - - - O(N) Restituisce il numero di elementi nel set.
countBy - - O(N) - - Applica una funzione di generazione delle chiavi a ogni elemento di una sequenza e restituisce una sequenza che fornisce chiavi uniche e il numero di occorrenze nella sequenza originale.
copiare O(N) - O(N) - - Copia la collezione.
creare O(N) - - - - Crea una matrice di elementi interi tutti con il valore iniziale specificato.
ritardo - - O(1) - - Restituisce una sequenza creata a partire dalla specifica ritardata fornita per una sequenza.
differenza - - - - O(M*log(N)) Restituisce un nuovo set con gli elementi del secondo set rimossi dal primo.
distinto O(1)* Restituisce una sequenza che non contiene voci duplicate in base a comparazioni generiche di uguaglianza e hash 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.
vuoto 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.
filtro O(N) O(N) O(N) O(N) O(N) Restituisce una nuova raccolta contenente solo gli elementi della raccolta per cui il predicato specificato restituisce true.
trovare 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)) - Applica la funzione a ogni mappatura della raccolta e restituisce la chiave per la prima mappatura 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 ciascun elemento della raccolta, passando un argomento accumulatore attraverso il calcolo. Se la funzione di input è f e gli elementi sono i0... iN, questa funzione calcola f (... (f s i0)...) in.
piega2 O(N) O(N) - - - Applica una funzione agli elementi corrispondenti di due raccolte, passando un argomento accumulatore attraverso 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, passando un accumulatore attraverso 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, passando un argomento accumulatore 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)).
per tutti 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 dato uno a uno.
get/nth O(1) O(N) O(N) - - Restituisce un elemento dall'insieme in base al relativo indice.
testa - 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.
incrociare - - - - O(log(N)*log(M)) Calcola l'intersezione di due insiemi.
intersectMany - - - - O(N1*N2...) Calcola l'intersezione di una sequenza di set. La sequenza non deve essere vuota.
èVuoto O(1) O(1) O(1) O(1) - Restituisce true se l'insieme è vuoto.
èSottoinsiemeProprio - - - - 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.
lunghezza 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.
mappa2 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 a coppie. Le due matrici di input devono avere la stessa lunghezza.
mappa3 - 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) - - - Crea una raccolta i cui elementi sono i risultati dell'applicazione della funzione specificata agli elementi corrispondenti delle due raccolte in coppia, passando anche l'indice degli elementi. Le due matrici di input devono avere la stessa lunghezza.
massimo 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 dell'insieme, confrontato utilizzando max sul risultato della funzione.
elemento massimo - - - - 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.
partizione 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.
permutare 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, viene sollevata un'eccezione System.Collections.Generic.KeyNotFoundException.
randomChoice O(1) O(1) O(1) - - Restituisce un elemento casuale dalla raccolta specificata.
randomChoiceBy O(1) O(1) O(1) - - Restituisce un elemento casuale dalla raccolta data utilizzando la funzione randomizer specificata.
randomChoiceWith O(1) O(1) O(1) - - Restituisce un elemento casuale dalla raccolta specificata con l'istanza di Random specificata.
scelteCasuali O(count) O(count) O(count) - - Restituisce una raccolta di elementi casuali dalla raccolta specificata, ogni elemento può essere selezionato più volte.
randomChoicesBy O(count) O(count) O(conteggio) - - Restituisce una raccolta di elementi casuali dalla raccolta specificata con la funzione randomizer specificata, ogni elemento può essere selezionato più volte.
randomChoicesWith O(count) O(count) O(count) - - Restituisce una raccolta di elementi casuali dalla raccolta specificata con l'istanza di Random specificata, ogni elemento può essere selezionato più volte.
campione casuale O(conteggio) O(conteggio) O(conteggio) - - Restituisce un campione casuale di elementi della raccolta specificata, ogni elemento può essere selezionato una sola volta.
randomSampleBy O(count) O(count) O(count) - - Restituisce un campione casuale di elementi dal colleciton specificato con la funzione randomizer specificata, ogni elemento può essere selezionato una sola volta.
randomSampleWith O(count) O(conteggio) O(count) - - Restituisce un campione casuale di elementi della raccolta specificata con l'istanza di Random specificata, ogni elemento può essere selezionato una sola volta.
randomShuffle O(N) O(N) O(N) - - Restituisce una nuova raccolta mescolata in un ordine casuale.
randomShuffleBy O(N) O(N) O(N) - - Restituisce una nuova raccolta mescolata in un ordine casuale con la funzione randomizer specificata.
randomShuffleWith O(N) O(N) O(N) - - Restituisce una nuova raccolta mescolata in un ordine casuale con l'istanza specificata Random.
randomShuffleInPlace O(N) - - - - Ordina la matrice di input in un ordine casuale modificando la matrice sul posto.
randomShuffleInPlaceBy O(N) - - - - Ordina l'array di input in un ordine casuale utilizzando la funzione randomizer specificata, modificando l'array direttamente.
randomShuffleInPlaceWith O(N) - - - - Ordina l'array di input in un ordine casuale utilizzando l'istanza Random specificata, modificando l'array in loco.
sola lettura - - O(N) - - Crea un oggetto di sequenza che delega all'oggetto di 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.
ridurre O(N) O(N) O(N) - - Applica una funzione a ogni elemento della raccolta, passando un argomento accumulatore attraverso 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.
riduciIndietro O(N) O(N) - - - Applica una funzione a ogni elemento della raccolta, facendo passare un argomento accumulatore attraverso il calcolo. Se la funzione di input è f e gli elementi sono i0... iN, questa funzione calcola f i0 (... (f iN-1 iN)).
togliere - - - 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.
Revisione O(N) O(N) - - - Restituisce un nuovo elenco con gli elementi in ordine inverso.
scansionare O(N) O(N) O(N) - - Applica una funzione a ogni elemento della raccolta, passando un argomento accumulatore attraverso 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.
scansione indietro 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.
mettere O(1) - - - - Imposta un elemento di una matrice sul valore specificato.
saltare - - 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.
tipo 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 confrontando con.
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 confronto.
sortInPlace Una 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 confrontare.
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 confrontare.
ordinaInLuogoCon Media O(N*log(N))

O(N^2) caso peggiore
- - - - Ordina gli elementi di un array modificandolo direttamente e utilizzando la funzione di confronto fornita come criterio di ordinamento.
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.
sub O(N) - - - - Costruisce un array che contiene la sottogamma specificata dall'indice iniziale e dalla lunghezza.
somma O(N) O(N) O(N) - - Restituisce la somma degli elementi dell'insieme.
sommaPer 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.
prendere - - O(N) - - Restituisce gli elementi della sequenza fino a un conteggio specificato.
takeWhile - - O(1) - - Restituisce una sequenza che, durante l'iterazione, restituisce elementi della sequenza sottostante mentre il predicato specificato restituisce true e quindi non restituisce più 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.
troncare - - 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 nella raccolta 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.
unione - - - - O(M*log(N)) Calcola l'unione dei due set.
unionMany - - - - O(N1*N2...) Calcola l'unione di una sequenza di set.
Decomprimere 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.
Finestra - - 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.

Vedere anche