pensare a un array dinamico come un costrutto livello inferiore rispetto TStringList
o TList<T>
.
L'array dinamico offre l'accesso diretto agli elementi tramite un puntatore. Il linguaggio nasconde il puntatore da te, ma è essenzialmente tutto ciò che è un array dinamico. Ma sei responsabile di eventuali riallocazioni e se desideri inserire o rimuovere elementi, devi scrivere il codice e gestire i dettagli.
Le classi di raccolta di livello superiore, TStringList
e TList<T>
vengono create sopra gli array dinamici. Questo è internamente come i contenuti sono memorizzati. Ma le classi di raccolta lo completano per te. Le operazioni di livello più elevato come l'inserimento e l'eliminazione e molte altre sono fornite come metodi. In sostanza, queste classi di raccolta offrono molto più comodità rispetto agli array dinamici non elaborati.
Per illustrare, prendere in considerazione l'atto di inserire un articolo. Per un array dinamico, procedere come segue:
- Ridimensionare l'array.
- Sposta gli elementi che si trovano dopo il punto di inserimento dalla posizione i a i + 1.
- Assegnare l'elemento inserito.
Se è necessario scrivere questo codice più di una volta, beh, si sta sbagliando.
Per la collezione di alto livello si scrive:
List.Insert(Index, Value);
e lasciare che la classe prendersi cura dei dettagli.
Si noti che per motivi storici e perché le stringhe sono particolarmente importanti, gli sviluppatori tendono a utilizzare la classe TStringList
dedicata, anziché TList<string>
. Anche in questo caso la classe dedicata offre funzionalità al di sopra e al di sotto di TList<string>
perché è specializzata in stringhe e può offrire funzionalità su misura per le stringhe. Ancora una volta, la classe dedicata offre convenienza.
Un luogo in cui gli array dinamici sono utili quando non si vuole incorrere nello schema di gestione della durata. Quindi per i compilatori desktop che non hanno ARC per le classi, è necessario distruggere esplicitamente le istanze TList<T>
. Ma gli array dinamici sono gestiti a vita da ARC. Se si sintetizzano array in un colpo e quindi non si ridimensionano, il problema della gestione a vita può rendere gli array più comodi da utilizzare.
Come regola generale, preferire le classi di raccolta di alto livello. Dovrebbero essere la tua scelta predefinita. A volte gli array dinamici sono la scelta giusta, ma tende ad essere per scenari più specializzati.
Allora benvenuto nell'oscurità e nel terrore! :) – TLama