LinkedHashMap in .NET

Mi chiedo se esiste una controparte per java.util.LinkedHashMap in .NET? (cioè gli elementi sono (ri) ordinati automaticamente se accedo ad un elemento. (booleano accessOrder)).

Un po ‘di Google sembra mostrare che non esiste un equivalente in C # per LinkedHashMap, ma ci sono alcune opzioni di terze parti disponibili.

Giusto per chiarire un po ‘per i lettori: LinkedHashMap si comporta in questo modo solo se costruito con un particolare sovraccarico del costruttore. Normalmente gli elementi vengono mantenuti nell’ordine di inserimento. (Questo mi sembra un po ‘strano, ma non importa.)

Non credo che ci sia una tale class in .NET. Non sarebbe troppo difficile crearne uno, usando un elenco di elementi collegati e un dizionario dalla chiave al nodo dell’elenco collegato. L’accesso consisterebbe quindi nel recuperare il nodo della lista collegata, spostarlo in testa e restituire il valore.

Sarei felice di implementarlo stasera o domani se lo desideri, anche se probabilmente non con test completi delle unità ecc. (Testare completamente una collezione è un’attività che richiede molto tempo!)

Ecco una implementazione C # che ho trovato su un forum :

Non è documentato, ma ha alcuni test. Non è generico, comunque. Almeno è qualcosa che immagino.

@ Jon: Lo apprezzerei anche se potessi fare un’implementazione veloce. Ho immaginato che un dizionario in cima a una LinkedList sarebbe stato il migliore, ma ho sentito che ci sono problemi di raccolta dei rifiuti con LinkedList che rallentano le cose.

Ho usato System.Collections.Specialized.OrderedDictionary come sostituto di LinkedHashMap. Ha funzionato per me. C’è qualcosa che mi manca su OrderedDictionary (sì, non è generico, ma è disponibile con .Net 2 o più recente)?

Nhibernate ha un’implementazione di NHibernate.Util.LinkedHashMap.

Se lo hai già sul tuo codice, come ho fatto, può essere utile