LinkedHashMap в .NET
-
20-08-2019 - |
Вопрос
Интересно, есть ли аналог java.util.LinkedHashMap
в .NET?(т.е.элементы (пере)упорядочиваются автоматически, если я обращаюсь к элементу.(логический accessOrder)).
Решение
Небольшой поиск в Google показывает, что для LinkedHashMap нет встроенного эквивалента C#, но есть некоторые сторонние варианты.
Другие советы
Немного поясню читателям:LinkedHashMap ведет себя таким образом только при сборке с одной конкретной перегрузкой конструктора.Обычно элементы сохраняются в порядке вставки.(Мне это кажется немного странным, но неважно.)
Я не верю, что в .NET существует такой класс.Было бы не так уж сложно создать его, используя связанный список элементов и словарь от ключа до узла связанного списка.В этом случае доступ будет состоять из извлечения узла связанного списка, перемещения его в голову и возврата значения.
Я был бы рад реализовать это сегодня вечером или завтра, если хотите, хотя, вероятно, не с полными модульными тестами и т. д.(Полное тестирование коллекции — занятие трудоемкое!)
Вот реализация C#, которую я нашел на Форум:
Это недокументировано, но есть некоторые тесты.Однако это не является универсальным.По крайней мере, я так думаю.
@Джон:Я тоже был бы признателен, если бы вы могли быстро реализовать.Я предполагал, что словарь поверх LinkedList будет лучше всего, но я слышу в LinkedList возникают проблемы со сбором мусора, которые замедляют работу.
Я использовал System.Collections.Specialized.OrderedDictionary в качестве замены LinkedHashMap.Это сработало для меня.Есть ли что-то, что мне не хватает в OrderedDictionary (да, он не является универсальным, но доступен в .Net 2 или новее)?
У Nhibernate есть реализация NHibernate.Util.LinkedHashMap.
Если он уже есть в вашем коде, как у меня, это может быть удобно.