Перебора по словарю с помощью 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> предметы в нужном порядке, а потом foreaching над ним будет в порядке первого входа / первого выхода.


Dictionarys-это хэш-таблицы, что означает, что вы не можете гарантировать, что итерация пар вернет их в том же порядке, в котором вы их добавили.

каждая пара представляет собой KeyValuePair<T_K, T_V>, Так что у вас может быть List<KeyValuePair<string, string>> это позволит вам перебрать в порядке их добавления, если это то, что вам нужно.


внутренний вид словаря будет зависеть от используемой хэш-функции. Однако, если вам нужен отсортированный вид данных, вы можете использовать Enumerable.OrderBy.