Questa risposta è semplicemente fornita per ridurre la frustrazione. In generale, si consiglia a una persona di imparare come condurre il benchmarking delle prestazioni correttamente prima di fare una domanda del genere.
Se le "chiavi" consistono esclusivamente di numeri interi consecutivi, puoi usare un array intero. Gli interi consecutivi basati su zero possono essere utilizzati come indice di matrice così com'è. Gli interi consecutivi non a base zero possono richiedere una rettifica del valore dell'indice prima di utilizzarlo con un array.
Anche se le chiavi non sono strettamente consecutive, in quanto vi sono una piccola quantità di buchi (valori interi non utilizzati tra le chiavi minima e massima), potrebbe essere comunque vantaggioso usare le prestazioni in un array.
Ricorda che l'utilizzo di un array rende il tuo codice fragile (più facilmente interrotto) alle modifiche. Pertanto, analizza attentamente le esigenze attuali e future del tuo progetto e documenta le limitazioni all'interno dei commenti del codice, o in qualche modo rendili evidenti agli utenti del tuo progetto.
Se ci sono alcune funzioni matematiche magiche che mappano le tue chiavi intere nei tuoi valori di ricerca, prova a vedere se sarà più veloce.
Se il dizionario è costruito in modo incrementale (aggiungendo le chiavi una per una), considera di utilizzare il costruttore Dictionary
con l'opzione di preallazione della dimensione, con una stima della dimensione massima necessaria. Ciò riduce il tempo speso per la riallocazione e il rehashing.
Come indicato nei commenti di altri, puoi eseguire il benchmark con SortedDictionary
(docs) , che è tipicamente, ma non è garantito che sia un albero di ricerca binario.
Se sai che la distribuzione delle tue chiavi integer può avere caratteristiche di distribuzione statistica insolite (ad esempio, tutte le tue chiavi hanno numeri pari e così via), potresti dover implementare una soluzione alternativa:
- A seconda dell'implementazione
Dictionary
, una soluzione alternativa potrebbe non essere necessaria se è già implementata dall'interno.
- Altrimenti, dovrai applicare una "funzione di diffusione chiave / valanga" alle tue chiavi intere e usare la chiave modificata come indice della tabella hash all'interno di una tipica tabella hash "modulo-N".
- Una tipica buona scelta (per le tabelle hash) è la funzione MurmurHash3.
Un dizionario int-int ordinato, inizializzato in anticipo e mai modificato, può essere riorganizzato come una matrice di coppie di numeri interi e la ricerca può essere eseguita con la ricerca binaria.
Se la mappatura int-int proviene da alcune funzioni matematiche con tendenze monotone, potrebbe essere possibile eseguire la ricerca della tabella più velocemente della ricerca binaria.