Non sono un esperto di C# e LINQ.Creazione di un dizionario ordinato utilizzando ToDictionary
Ho un Dictionary
, che capisco una tabella hash, cioè, le chiavi non sono ordinate.
dataBase = new Dictionary<string, Record>()
Record
è una classe definita dall'utente che contiene un numero di dati per una determinata stringa chiave.
ho trovato un esempio interessante che converte questo Dictionary
in un ordinato dizionario da LINQ:
var sortedDict = (from entry in dataBase orderby entry.Key ascending select entry)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Questo codice funziona correttamente. Il risultato sortedDict
è ordinato per chiavi.
Domanda: ho scoperto che sortedDict
è ancora una tabella hash, un tipo di:
System.Collections.Generic.Dictionary<string, Record>
Mi aspettavo il dizionario risultante dovrebbe essere una sorta di map
come in C++ STL, che è generalmente implementato come un albero binario (bilanciato) per mantenere l'ordine delle chiavi. Tuttavia, il dizionario risultante è ancora una tabella hash.
In che modo sortedDict
è possibile mantenere l'ordine? Una tabella hash non può contenere l'ordinamento delle chiavi. L'implementazione di C23 è Generic.Dictionary
diversa da una tipica tabella hash?
Utilizzando 'ToDictionary()', si chiesto e ottenuto un 'dizionario'. Se vuoi mantenere un Diecionario ordinato, usa 'SortedDictionary' – TheEvilPenguin
lo so. Ma, ho bisogno di un dizionario ordinato all'ultimo momento. La mia domanda è che come 'Dictionary' può mantenere l'ordine, che è strano per me.Il codice LINQ crea effettivamente un dizionario * ordinato *, mentre il tipo è ancora un dizionario. – minjang
Il linq ordina semplicemente 'Dictionary', non crea un' SortedDictionary' –