Неожиданная проблема Копирование словарей - PullRequest
0 голосов
/ 03 марта 2010

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

var dic2 = new Dictionary<string, int>(dic.ToDictionary(kvp => kvp.Key, kvp => 0));

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

Любой способ сбросить значения, но сохранить тот же порядок ключей? Уитус прибегает к какой-то сортировке?

Ответы [ 4 ]

7 голосов
/ 03 марта 2010

Ответ не должен полагаться на порядок ключей в Dictionary<,> в первую очередь. Это решительно не гарантировано.

Это задокументировано на MSDN , но не так ясно, как хотелось бы:

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

Насколько мне известно,

.NET в настоящее время не имеет реализации словаря, сохраняющего порядок вставки: (

3 голосов
/ 03 марта 2010

Порядок ключей в Dictionary<K,V> не поддерживается. Возможно, вы захотите использовать SortedDictionary<K,V> вместо этого (обратите внимание, что этот класс сортирует записи на основе ключа, но не допускает произвольный порядок, если вы не создаете конкретный ключ сравнения)

3 голосов
/ 03 марта 2010

.Net словари не упорядочены.

На ваш вопрос нет ответа.

Вы должны рассмотреть возможность использования List<KeyValuePair<string, int>>.

1 голос
/ 03 марта 2010

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

...