Детерминированность c характер. NET словарь перечисление - PullRequest
0 голосов
/ 06 февраля 2020

Я понимаю, что порядок записей в пределах Dictionary<TKey, TValue> не определен. Однако определено ли это c?

То есть, если я добавлю одни и те же элементы в том же порядке и перечислю их в Словаре, я всегда получу элементы в тот же порядок, на каждом пробеге, на каждой машине?

Это кажется так оно и есть, но могу ли я положиться на это?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Спасибо всем - похоже, ответом является "НЕТ".

MSDN документы для String.GetHashCode объявляет:

Ха Сам код sh не гарантированно будет стабильным. Коды Ha sh для идентичных строк могут различаться в разных реализациях. NET, в версиях. NET и в разных платформах. NET (например, 32-разрядных и 64-разрядных) для одной версии. NET. В некоторых случаях они могут даже отличаться в зависимости от области приложения. Это означает, что два последующих запуска одной и той же программы могут возвращать разные коды ha sh.

Если коды ha sh являются вариантами, то элементы могут оказаться в разных сегментах и, таким образом, перечислить их в другой порядок.

0 голосов
/ 06 февраля 2020

Взято из документации здесь: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfrom=MSDN&view=netcore-3.1

Для целей перечисления каждый элемент в словаре рассматривается как структура KeyValuePair, представляющая значение и его ключ. Порядок возврата товаров не определен.

...