2010-03-10 11 views
12

Ho una lista di oggetti e ho bisogno di trovare un oggetto il più rapidamente possibile (dalla sua proprietà name). Quale struttura dati dovrei usare? So che posso usare un dizionario, ma non ci saranno mai più di 10 elementi nell'elenco e, se ricordo bene, il dizionario è implementato come array se la raccolta contiene 10 elementi o meno.Devo usare un dizionario per raccolte con 10 articoli o meno, o c'è un'alternativa migliore?

Grazie.

+6

Per 10 articoli o meno probabilmente non importa quale tipo di struttura si utilizza. –

+0

La scelta della struttura dei dati dipende da molti fattori diversi dalla semplice dimensione. Con quale frequenza vengono inseriti e rimossi gli elementi? Quanto è critica la velocità nel trovare un oggetto? Sarà usato in un ciclo stretto? Quanto è critica la velocità degli inserimenti e delle rimozioni? 10 punti sono un limite rigido o un campo da baseball? –

+1

Hai profilato la tua domanda e hai stabilito che si trattava di un collo di bottiglia per le prestazioni? Sarei molto sorpreso se lo fosse. – TrueWill

risposta

10

MSDN raccomanda l'ListDictionary per le collezioni con 10 articoli o meno:

Questa è una semplice implementazione di IDictionary utilizzando una lista singolarmente concatenata. È più piccolo e più veloce di un Hashtable se il numero di elementi è pari o inferiore a 10. Questo non dovrebbe essere usato se le prestazioni sono importanti per un numero elevato di elementi.

+0

+1 Sembra perfetto allo scopo! –

+9

Questa raccomandazione potrebbe non essere aggiornata poiché ListDictionary non è generico. I documenti lo hanno detto fin dall'inizio. –

+0

Grazie, Anna, sembra una risposta perfetta alla mia domanda. –

4

Si può prendere in considerazione lo System.Collections.Specialized.ListDictionary se si è certi che ci saranno meno di dieci articoli.

Considerare anche il System.Collections.Specialized.HybridDictionary che commuta il comportamento (con un piccolo overhead) nel caso in cui le dimensioni aumentino oltre una soglia, a portata di mano se il presupposto è sbagliato.

0

Perché non utilizzare solo un Hashtable? È nello spazio dei nomi System.Collections.

+2

Poiché entrambe le classi Dictionary <> e Hashtable sono implementazioni di hashtables e hanno un sovraccarico nel dover calcolare l'hashcode per ogni elemento che si paga solo quando la raccolta non è banalmente piccola. –

2

Poiché si desidera la ricerca più rapida possibile da una proprietà, è necessario utilizzare Dictionary<Key, Value>. Le dimensioni non ti fanno male se vuoi una ricerca veloce. Non è che un Dictionary<Key, Value> di soli 10 elementi o meno stia prendendo una tonnellata di memoria. Dictionary<Key, Value> ha un costruttore che accetta un int per impostare la capacità.