В документации четко указано, что «для целей перечисления каждый элемент в словаре рассматривается как структура KeyValuePair <(Of <(TKey, TValue>)>), представляющая значение и его ключ. Порядок в какие предметы возвращены не определено . " но я не уверен.
Во всех проведенных мною тестах элементы всегда упорядочены путем вставки.
Мне показалось это странным, потому что я также протестировал HashMap и LinkedHashMap (в Java), и порядок в HashMap не является правильным , как ожидалось, но, как сказал Джон Скит, порядок в LinkedHashMap.
Может ли кто-нибудь указать на провал теста с помощью словаря?
Вот код, который я использую для проверки:
IDictionary<string, int> dic = new Dictionary<string, int>(10);
Console.WriteLine("Adding ...");
for (int i = 0; i < 1000000; i++)
{
Guid guid = Guid.NewGuid();
dic.Add(guid.ToString(), i);
}
Console.WriteLine("Testing ...");
bool first = true;
int lastItem = 0;
foreach (var item in dic.Values)
{
if (first)
{
first = false;
}
else
{
if (lastItem != item - 1)
{
Console.WriteLine("Test Failed !");
break;
}
}
lastItem = item;
}
Console.WriteLine("Done.");