Сортировка Словаря‹строка,Объект›, с несколькими уровнями

этот вопрос основан на предыдущем сообщении https://stackoverflow.com/a/8425200/737076

Вопрос в том, как бы вы отсортировали однажды созданный Словарь, и все его дочерние элементы, и дочерние дочерние элементы.

Я думаю об Comparer, но хотел бы получить несколько предложений.


person Vince    schedule 18.04.2012    source источник
comment
Словарь по своей сути неупорядочен. Вы не можете этого сделать.   -  person SLaks    schedule 18.04.2012


Ответы (3)


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

List<string> dictionaryKeys = new List<string>(dict.Keys);
dictionaryKeys.Sort();

Затем выполните итерацию по списку, извлекая значения по порядку.

for (i = 0; i < dictionaryKeys.Count; i++)
{
    string key = dictionaryKeys[i];
    string value = dict[key];
}

Это будет своего рода симуляция словаря.

В случае словаря с несколькими уровнями вам придется перебирать все уровни и делать это с использованием какой-то логики.

Однако, если ваша цель - отсортированный словарь, я уверен, что есть лучшие способы хранения вашей информации, может быть, List<class_you_created_to_hold_all_the_information> :)

person caesay    schedule 18.04.2012
comment
Если целью является отсортированный словарь, нет необходимости изобретать велосипед: используйте SortedDictionary. - person phoog; 18.04.2012

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

person Dan Busha    schedule 18.04.2012
comment
Не знал, что существует. +1 за расширение моих знаний о .Net framework. Хотя не похоже, что есть способ явно отсортировать элементы (с моего взгляда на предоставленную вами ссылку). Пожалуйста, просветите меня, если я ошибаюсь. - person caesay; 18.04.2012
comment
@caesay, вы можете создать SortedDictionary с помощью специального компаратора для типа ключа. Элементы поддерживаются в ключевом порядке; нет необходимости сортировать их явно. Если вы хотите отсортировать значения, вам нужно сделать это в другом месте. - person phoog; 18.04.2012
comment
Привет, я уже преобразовал свой класс для использования SortedDictionary. Я больше искал хороший способ обработки нескольких слоев дочерних элементов и сортировки на каждом уровне. Спасибо всем за предложения. - person Vince; 18.04.2012

Используйте SortedDictionary класс.

person Thiru kumaran    schedule 18.04.2012
comment
Об этом уже упоминалось. Пожалуйста, не повторяйте то, что кто-то уже опубликовал, если у вас нет полезной информации, которую можно было бы добавить к этому. Чего в данном случае нет. - person caesay; 18.04.2012