LinkedHashMap in.NET



Интересно, есть ли аналог java.util.LinkedHashMap в .NET? (т. е. элементы (re)упорядочиваются автоматически, если я обращаюсь к элементу. (логический порядок доступа)).

630   5  

5 ответов:

Немного Гугля, кажется, показывает, что нет встроенного эквивалента в C# для LinkedHashMap, но есть некоторые доступные сторонние опции.

Просто чтобы немного прояснить для читателей: LinkedHashMap ведет себя так только при сборке с одной конкретной перегрузкой конструктора. Обычно элементы поддерживаются в порядке вставки. (Мне это кажется немного странным, но не важно.)

Я не верю, что есть такой класс В .NET. было бы не слишком сложно построить его, используя связанный список элементов и словарь от ключа к узлу связанного списка. Доступ тогда будет состоять из извлечения узла связанного списка, перемещения его в начало и возвращает значение.

Я был бы рад реализовать его сегодня или завтра, если вы хотите - хотя, вероятно,не с полным блоком тестов и т. д. (Полное тестирование коллекции-это трудоемкий бизнес!)

Вот реализация C#, которую я нашел на форуме :

Он не документирован, но имеет некоторые тесты. Однако она не является общей. По крайней мере, это то, что я думаю.

@Jon: я был бы очень признателен, если бы вы могли сделать быструю реализацию. Я думал, что словарь поверх LinkedList был бы лучшим, но я слышал есть проблемы с сборкой мусора в LinkedList, которые замедляют процесс.

Я использовал систему.Коллекции.Специализированный.OrderedDictionary как замена LinkedHashMap. Это сработало для меня. Есть ли что-то, чего мне не хватает в OrderedDictionary (да, это не универсальный, но он доступен с .Net 2 или новее)?

У Nhibernate есть NHibernate.Утиль.Реализация LinkedHashMap.

Если он уже есть в вашем коде, как у меня, это может быть удобно

Comments

    Ничего не найдено.