Domanda

La gente,

Se chiamo Dove il metodo di estensione LINQ, ci vuole sfruttare la selezione in SortedDictionary o lo fa attraversare ogni KVP e rendere il confronto? C'è un vantaggio di utilizzare SortedDictionary per lo scenario ricerca-per-criteri?

Grazie!

È stato utile?

Soluzione

No, mentre i metodi di LINQ tentano alcuni calchi di base (cioè a ICollection quando è necessaria una stima di lunghezza), non possono iniziare a lanciare l'IEnumerable ad ogni collezione .net là fuori per vedere se si può fare uso di proprietà della collezione .

Tuttavia, come si sa le proprietà della fonte SortedDictionary, si potrebbe utilizzare TakeWhile o SkipWhile invece di Dove?

Altri suggerimenti

Per quanto mi riguarda posso dire di esaminare il codice sorgente (via Reflector), nessun trattamento speciale viene eseguita per SortedDictionary<TKey, TValue>.

Questo dipende interamente dal comportamento di implementazione enumerator di SortedDictionary. Utilizzare Reflector lì per vedere che cosa comportamento che mostre di enumerazione.

No, la query LINQ sarà enumerare la collezione come una sequenza di KeyValuePair oggetti e applicare il predicato a ciascuno. Pertanto, non sarà possibile ottenere il beneficio del lookup veloce che un SortedDictionary fornisce in questo caso.

Tuttavia, si dovrebbe capire che non è davvero possibile utilizzare l'efficiente ricerca della chiave di un dizionario (ordinate o meno) per eseguire questo particolare tipo di query, perché la ricerca della chiave efficiente risolverà ad una singola voce. Questo perché chiavi duplicate non sono ammessi nella struttura di dati, quindi per una data chiave che può essere utilizzata per fare veloce occhiata si sempre e solo risolvere ad un singolo valore risultante, non una sequenza.

Pertanto, lo scenario non ha molto senso.

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