Перебора по словарю с помощью foreach, в каком порядке это делается?
скажем, у меня есть Dictionary
и я добавлю каждого key
и value
запись в определенном порядке.
Теперь, если я хочу позже, чтобы иметь возможность повторить это Dictionary
в том же порядке были добавлены записи, это порядок, который я получаю с помощью simple foreach
цикл по этому словарю?
если нет, я буду рад услышать, как я могу это сделать, я знаю, что это можно сделать легко с List
вместо Dictionary
но я не хочу.
спасибо
4 ответов
нормальный Dictionary
не гарантирует порядок элементов.
вам нужно OrderedDictionary
если вы хотите поддерживать элементы заказа, где добавлены к нему. Обратите внимание, что в .Net framework нет универсальной версии этого класса, поэтому либо нужно отказаться от некоторой безопасности типов, либо найти другую реализацию (т. е. https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IO as предложил Тим S).
в качестве альтернативы если поиск O(log n) прекрасен, и ключи должны быть отсортированы - SortedDictionary.
звучит как то, что вы хотите, это Queue<T>
: http://msdn.microsoft.com/en-us/library/7977ey2c.aspx
добавить KeyValuePair<T, U>
предметы в нужном порядке, а потом foreach
ing над ним будет в порядке первого входа / первого выхода.
Dictionary
s-это хэш-таблицы, что означает, что вы не можете гарантировать, что итерация пар вернет их в том же порядке, в котором вы их добавили.
каждая пара представляет собой KeyValuePair<T_K, T_V>
, Так что у вас может быть List<KeyValuePair<string, string>>
это позволит вам перебрать в порядке их добавления, если это то, что вам нужно.
внутренний вид словаря будет зависеть от используемой хэш-функции. Однако, если вам нужен отсортированный вид данных, вы можете использовать Enumerable.OrderBy
.