Domanda

Uso spesso Dizionario in C # 2.0 con la prima chiave come stringa che conteneva un identificatore univoco.

Sto imparando C # 3.0 + e sembra che ora posso semplicemente usare un Elenco e semplicemente fare LINQ su quell'oggetto per ottenere l'oggetto specifico (con il .where ()).

Quindi, se ho capito bene, la classe Dictionary ha perso il suo scopo?

È stato utile?

Soluzione

no, un dizionario è ancora più efficiente per riportare indietro le cose con una chiave.

un elenco che devi ancora scorrere attraverso l'elenco per trovare quello che desideri. Un dizionario esegue una ricerca.

Altri suggerimenti

Se hai solo un Elenco, quindi facendo una selezione LINQ scansionerai tutti gli elementi dell'elenco confrontandolo con quello che stai cercando.

Il dizionario tuttavia calcola un codice hash della stringa che stai cercando (restituito dal metodo GetHashCode). Questo valore viene quindi utilizzato per cercare la stringa in modo più efficiente. Per maggiori informazioni su come funziona vedi Wikipedia .

Se hai più di alcune stringhe, il metodo iniziale (Elenco) inizierà a rallentare dolorosamente.

IMHO l'approccio del Dizionario sarà MOLTO più veloce di LINQ, quindi se hai un array con molti elementi, dovresti piuttosto usare Dizionario.

Il dizionario è implementato come una tabella hash. Pertanto, dovrebbe fornire un accesso a tempo costante per le ricerche. L'elenco è implementato come un array dinamico, che ti dà accesso al tempo lineare.

Basato sulle strutture di dati sottostanti, il Dizionario dovrebbe comunque offrire prestazioni migliori.

Documenti MSDN sul dizionario

http://msdn.microsoft.com/en-us/library /xfhwa508.aspx

ed Elenco

http://msdn.microsoft.com/en-us/library /6sh2ey19.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top