Вопрос

Интересно, есть ли аналог 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top