Questo è esattamente OrderedDictionary in PowerCollections. È praticamente identico a SortedDictionary (albero nero rosso con generici) con l'aggiunta della possibilità di impostare un tasto di inizio/fine e di scansionare tutti i valori in quell'intervallo.
SortedDicionary consente solo di esporre una funzione GetEnumerator() che inizia all'inizio della raccolta e consente solo una chiamata a MoveNext(), quindi anche se si utilizza LINQ non si verifica nulla di magico: si avvia all'inizio e si esegue il espressione su ogni singolo nodo, in ordine, fino a quando non trova quelli corrispondenti alla tua espressione LINQ.
OrderedDictionary ha una funzione che ottiene un enumeratore in corrispondenza di o prima di una determinata chiave e che esegue la ricerca in O (log n).
Una parola di cautela però: l'enumeratore nella PowerCollections OrderedDictionary è implementato utilizzando "resa" e l'utilizzo della memoria e le prestazioni di enumerazione è almeno O (n^2) ... è possibile modificare l'implementazione te stesso per renderlo implementare un enumeratore tradizionale ed entrambi questi problemi vanno via. Presenterò quella patch a Codeplex se riuscirò mai a trovare il tempo.
Rispondendo alla tua altra domanda, denominata "Libro o Insegnante", il * vero * modo migliore per apprendere la programmazione è * scrivere programmi *. Scrivi questo per conto tuo e poi imparerai qualcosa. –
@Pavel: Potrei scrivere questo, ma sto cercando qualcosa di pronto, così posso continuare a sviluppare i lati principali del mio programma e accelerare lo sviluppo. –