Не сортировать или не заказывать HashTable в .net - PullRequest
0 голосов
/ 13 октября 2011

Я работаю с хеш-таблицей в C # и по какой-то причине не получаю ожидаемого результата, так как Hashtable сортирует все записи.

Я хочу удалить эту сортировку, поскольку у меня уже есть список в определенном порядке, который должен быть напечатан

Список добавляется в хеш-таблицу правильно в зависимости от порядка, но когда я выполняю итерацию по HashTable,он сортирует все записи и производит полностью отсортированные записи.Кстати, я использую DictionaryEntry для перебора хеш-таблицы.

Спасибо

1 Ответ

3 голосов
/ 13 октября 2011

Это ожидаемое поведение. Это не сортировка записей, записи Hashtables повторяются в недетерминированном порядке. Они оптимизированы для произвольного доступа, и, как следствие, порядок вставки не сохраняется в структуре HashTable, поэтому записи не могут повторяться в порядке вставки.

Согласно странице MSDN сериализация и десериализация хеш-таблицы может привести к изменению порядка итерации.

Возможно, вы сможете использовать NameValueCollection или SortedDictionary, как указано в этот вопрос / ответ

Другой вариант (при условии, что ни один из приведенных выше вариантов не выполняет то, что вы хотите) - создать класс, который будет делать именно то, что вы хотите. Вы можете отслеживать записи и сохранять их в списке (а также в хеш-таблице), а затем возвращать итератор для списка, а не хеш-таблицу из вашего класса, чтобы вы могли получить итерацию по порядку и быстрый произвольный доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...