Semanticamente, Dictionary<int, T>
e List<T>
sono molto simili, entrambi sono contenitori ad accesso casuale del framework .NET. Per utilizzare un elenco in sostituzione di un dizionario, è necessario un valore speciale nel tipo T
(come null
) per rappresentare gli spazi vuoti nell'elenco. Se T
non è un tipo nullable come int
, potresti invece utilizzare int?
, oppure se ti aspetti di memorizzare valori positivi, potresti anche usare un valore speciale come -1 per rappresentare spazi vuoti.
Quale sceglierai dovrebbe dipendere dall'intervallo dei valori chiave. Se le tue chiavi in Dictionary<int, T>
rientrano in un intervallo intero, senza molti spazi tra di esse (ad esempio, 80 valori su [0, ... 100]), un List<T>
sarà più appropriato, poiché l'accesso per indice è più veloce e in questo caso c'è un sovraccarico di memoria e tempo inferiore rispetto a un dizionario.
Se i tuoi valori chiave sono 100 int
valori da un intervallo come [0, ..., 1000000], quindi List<T>
ha bisogno di memoria per contenere 1000000 valori di T, dove il tuo dizionario avrà solo bisogno di memoria in un dell'ordine di grandezza attorno a 100 valori di T, 100 valori di int (più un po 'di overhead, in realtà aspettiamo circa 2 volte la memoria per memorizzare quei 100 tasti e valori). Quindi in quest'ultimo caso un dizionario sarà più appropriato.