This Ответ на StackOverflow полностью описывает, что HashSet
неупорядочен и его порядок перечисления элементов не определен и на него не следует полагаться.Сохраняет ли HashSet порядок между перечислениями?
Однако
Это приводит anouther вопрос: я должен или я не должен полагаться на порядка enumeraetion между двумя sebsequent перечислений? При отсутствии вставки или удаления.
Например, позволяет сказать, что я добавил некоторые детали к HashSet:
HashSet<int> set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
set.Add(4);
set.Add(5);
Теперь, когда я перечисляю этот набор через foreach
, скажу я получаю эту последовательность:
// Result: 1, 3, 4, 5, 2.
Вопрос в следующем: сохранит ли порядок, если я снова перечислил множество, если у меня нет вставок/абзацев? Всегда будет то же самое?
Даже если это было правдой, это должно было быть документировано. Поскольку это не так, я бы не стал полагаться на это. Он может сломаться в вашем лице в любое время с будущим обновлением структуры. Почему на Земле вы использовали бы хэш, если вам нужен гарантированный порядок перечисления. Это абсолютно неправильная структура данных, которую вы выбрали для моделирования своих данных с учетом ваших требований. –
Поскольку хэш-набор в основном представляет собой хеш-таблицу, которая имеет фиксированный порядок слотов, да, порядок итерации является постоянным, если вы вообще не изменяете набор. Если вы полагаетесь на это, хотя? Нет, я так не думаю, вам следует избегать полагаться на это. – poke
Ну, я пытаюсь полагаться только на порядок двух последовательных перечислений набора, вот и все. Мне нужна структура данных O (1) add/remove плюс положительный ответ на вопрос выше. Есть ли? – AgentFire