2015-02-16 12 views
8

Qual è la differenza tra elenchi, matrici e tuple in F #? È facile convertire tra loro quando richiesto? Sembrano tutti simili nello spirito, quindi cosa devo veramente sapere che mi consente di capire quando usarne uno rispetto all'altro?Qual è la differenza tra elenchi, matrici e tuple in F #?

+0

(nota: dubito che questa sia una domanda originale, ma lo stesso suggeritore di Stackoverflow per domande simili non trovava i duplicati per me ...) –

risposta

10

A tuple è un raggruppamento di valori senza nome e ordinati. Ogni valore in una tupla non deve essere dello stesso tipo, il che significa che si può avere una tupla definita come:

let someTuple = (1, "foo", 42.3) 

Ciò creerebbe una tupla contenente un int, stringa e valore float.

A list è un insieme ordinato di valori dello stesso tipo che è immutabile. Questo è probabilmente il tipo di raccolta più comune utilizzato nella programmazione funzionale, poiché è completamente immutabile e ha molte funzionalità per la creazione di elenchi costruiti su elenchi creati in precedenza, che consente di creare raccolte che "crescono" (sono in realtà nuove collezioni, tuttavia, come le liste sono immutabili).

Un array è una raccolta mutabile di dimensioni fisse. Sono molto efficienti da creare, ma devono sempre essere un unico tipo.

È facile da convertire tra di loro quando richiesto?

È molto facile convertire tra elenchi e array. È possibile utilizzare List.ofArray, List.toArray, Array.ofList e Array.toList per convertire tra i tipi.

La conversione da tupla a matrice o elenco non è comune, e non sempre possibile, poiché le tuple consentono di memorizzare più tipi all'interno di essi.

Sembrano tutti simili nello spirito, quindi cosa devo veramente sapere che mi consente di capire quando usarne uno rispetto all'altro?

Gli elenchi e gli array vengono entrambi utilizzati per le raccolte. In generale, ti consigliamo di preferire le liste se vuoi creare liste che "crescono", come fare una nuova lista composta da un elemento + la lista originale è molto più efficace di fare la stessa cosa con un array.

Gli array vengono spesso utilizzati per scenari con prestazioni più elevate (hanno una migliore localizzazione della memoria, sono più efficienti in termini di spazio, ecc.), Ma sono di dimensioni mutabili e fisse, quindi spesso non sono l'ideale quando si tenta di lavorare con la costruzione collezioni.

Le tuple vengono generalmente utilizzate per scenari completamente diversi. Il caso d'uso più comune per le tuple è quello di passare più oggetti come un valore. Questo avviene automaticamente quando si utilizzano metodi quadro che hanno out parametri, ad esempio, così vedrete i casi d'uso come:

let (success, value) = int.TryParse(someString) 

In questo caso, la tupla viene creata automaticamente e quindi modello abbinato per estrarre i valori in un singola riga di codice. Invece di pensare a una tupla come a una "collezione", è più un modo per contenere più valori, spesso di tipi diversi, insieme.

1

Informazioni sull'uso di tipi di raccolta:

Liste quando: Avete bisogno di una collezione dinamica che cambia in termini di dimensioni. List è un elenco unidirezionale collegato, quindi tieni presente che ogni membro dell'elenco richiede 4 o 8 byte di memoria aggiuntiva che memorizza il puntatore al successivo elemento dell'elenco.

Matrici quando: è necessario memorizzare una grande quantità di valori primitivi, come int, float o byte. Le matrici rappresentano un blocco statico di memoria riservato ai valori, questo è efficiente quando è necessario memorizzare per esempio i byte di un'immagine.

supplementari collezioni utili:

Imposta quando: è necessario memorizzare, ben un set. Set è una raccolta di valori unici. Set ha funzioni utili per calcolare differenza, unione e intersezione. Ad esempio potresti avere un set di tutte le persone (A) e un gruppo di persone che hanno comprato caramelle (B) in modo da poter calcolare A - B = C, ora hai impostato C che rappresenta le persone che non hanno comprato caramelle.

Mappe quando: è necessaria una proiezione da un valore a un altro. Ora nell'esempio precedente hai calcolato C (persone che non comprano caramelle), probabilmente hai usato qualche id per descrivere queste persone. Ora puoi proiettare da questo id al record della persona usando Map :).

Spero sia stato utile.

+0

@Reed Costruisco una griglia in base alle tue risposte. È pieno di buchi. Riempi i buchi? Foglio di calcolo modificabile: [link] (https://docs.google.com/spreadsheets/d/1YQDNeRMj68HszxnkdgOK03CuMIlz7XHQzI0aLcMfe3U/edit?usp=sharing) –

Problemi correlati