Перечислитель Словаря <TKey, TValue> пары значения клавиши Return в порядке они были добавлены?

Что относительно того, чтобы выполнить его http сервер?

Это кажется сумасшедшим, но рабочий простой веб-сервер для управления Вашим сервером требует всего нескольких строк с помощью web.py

, можно также рассмотреть создание канала Unix.

17
задан 101100 22 July 2014 в 18:33
поделиться

6 ответов

Это случайно, хотя и предсказуемо. Вы абсолютно не должны на это полагаться. Обычно это будет случиться в простых ситуациях, но если вы начнете удалять элементы и заменять их чем-либо, либо с тем же хеш-кодом, либо просто попадая в ту же корзину, этот элемент займет позицию оригинала, несмотря на были добавлены позже, чем другие.

Это относительно сложно воспроизвести, но мне удалось это сделать некоторое время назад для другого вопроса :

using System;
using System.Collections.Generic;

class Test
{
    static void Main(string[] args)
    {
        var dict = new Dictionary<int, int>();        
        dict.Add(0, 0);
        dict.Add(1, 1);
        dict.Add(2, 2);
        dict.Remove(0);
        dict.Add(10, 10);

        foreach (var entry in dict)
        {
            Console.WriteLine(entry.Key);
        }
    }
}

Результаты показывают 10, 1, 2, а не 1 , 2, 10.

Обратите внимание, что даже если похоже, что текущее поведение всегда будет давать элементы в порядке вставки, если вы не выполняете никаких удалений, нет гарантии, что будущие реализации будут делать то же самое. ...

28
ответ дан 30 November 2019 в 10:27
поделиться

Из MSDN :

В целях перечисления каждый элемент в словаре рассматривается как KeyValuePair <(Of <(TKey, TValue>)>) структура, представляющая значение и его ключ. Порядок, в котором возвращаются элементы, не определен .

[Курсив мой]

22
ответ дан 30 November 2019 в 10:27
поделиться

Если вы хотите перебрать словарь в фиксированном порядке, вы можете попробовать OrderedDictionary

3
ответ дан 30 November 2019 в 10:27
поделиться

По замыслу Dictionary не является упорядоченной структурой, поскольку он предназначен для использования в основном для доступа на основе ключей.

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

2
ответ дан 30 November 2019 в 10:27
поделиться

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

0
ответ дан 30 November 2019 в 10:27
поделиться

Я считаю, что перечисление Dictionary вернет ключи в том же порядке, в котором они были вставлены , если все ключи хешируются с одинаковым значением . Это связано с тем, что реализация Dictionary использует хэш-код ключевого объекта для вставки пар ключ / значение в сегменты, а значения (обычно) сохраняются в сегментах в том порядке, в котором они вставлен. Если вы постоянно наблюдаете такое поведение с вашими определяемыми пользователем объектами, возможно, вы не (правильно) переопределили метод GetHashCode () ?

0
ответ дан 30 November 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: