stavo guardando qualche codice mio collaboratore ha registrato, esso si presentava così:Perché il dizionario .Net sembra che sia ordinato?
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
ho subito detto al mio collega di lavoro che il suo codice è sbagliato, perché il Dictionary
è una tabella hash, un non -serie assortite. Dovrebbe o usare una raccolta di conservazione degli ordini, o ordinare gli articoli più tardi mentre li legge dal dizionario con foreach
, ho detto.
Ma lui ha risposto "No, no, il mio codice è corretto! Guarda: ora che ho aggiunto il OrderBy
, gli articoli appaiono nell'ordine corretto."
Risulta, nel caso di test, aveva ragione. Ho provato su altri dati, ma era ancora perfettamente risolto!
Gli ho detto che non dovrebbe fare affidamento su questo comportamento, ma non è d'accordo, e ho difficoltà a spiegare perché. Inoltre, sono interessato al motivo per cui l'ordine sembra così spesso conservato.
Quindi la mia domanda è ... Perché la Dictionary
, una raccolta fondamentalmente non ordinata, sembra tanto simile a come è ordinata?
Dizionario <> non fornisce alcuna garanzia che la raccolta è ordinata . Di proposito, non usa Random. Sì, il codice è sbagliato. –
sì Justin, questo è un duplicato. La risposta della domanda che hai collegato è ciò che volevo. Come puoi trovare i duplicati così velocemente tra così tante domande sui dizionari? Ho cercato e non ho potuto trovarlo. Grazie! –
Non so (motivo per cui sto postando questo come commento) ma immagino che sia lo stesso di SQL: le righe restituite da 'SELECT' vengono restituite in ordine non specificato a meno che non sia inclusa una clausola' ORDER BY' . Spesso, in particolare in insiemi di dati di piccole dimensioni, le righe vengono restituite nello stesso ordine in cui sono state inserite, facendo scattare un sacco di persone. (Dico sempre alle persone di includere un "ORDER BY" se si preoccupano per l'ordine dei risultati. * Potrebbe * funzionare senza, ma potrebbe anche rompersi in modo orribile.) –