C # Обратные элементы в словаре - PullRequest
3 голосов
/ 28 июля 2010

Я пытаюсь изменить элементы в словаре в C #. Я пробовал:

Dictionary<double, int> dict = new Dictionary<double, int>();
...add itmes to it....
var v = dict.Reverse()

Однако dict.Reverse () дает мне тип IEnumberable>. Мне просто интересно, как я могу сделать это в тип словаря?

Заранее спасибо.

Ответы [ 3 ]

16 голосов
/ 28 июля 2010

Стоп!

Словари, хеш-таблицы и наборы не имеют порядка.

Нет абсолютно никакого смысла сортировать или изменять порядок.

11 голосов
/ 28 июля 2010

Словарь не является упорядоченной структурой данных.Чтобы Reverse имел какое-либо реальное значение, вам нужно использовать SortedDictionary.Вы можете получить обратную копию SortedDictionary, создав новую с Comparer, который выполняет сортировку, противоположную оригиналу (см. constructor ).

var reversed = new SortedDictionary( original, new ReverseKeyComparer() );

Обратите внимание, что ReverseKeyComparerэто вымышленный класс для примера.

Кроме того, вам нужно знать, что SortedDictionary является своего рода неправильным, если вы приравниваете словарь к map или hashtable .Он использует реализацию двоичного дерева (я думаю, что Red-Black) с другой алгоритмической сложностью, чем реализация словаря.См. Разделы «Примечания» на соответствующих страницах документации.Если производительность имеет решающее значение, вы можете подумать, действительно ли упорядочение действительно важно.

3 голосов
/ 28 июля 2010

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

...