Сортиране на речник‹низ, обект› с множество нива

този въпрос се основава на предишна публикация 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, който е внедрен като двоично дърво за търсене а не hashmap. В допълнение към прилагането му по същия начин, както бихте направили в предишния си въпрос, трябва да предоставите Comparer, за да опишете как да сортирате вашата колекция.

person Dan Busha    schedule 18.04.2012
comment
Не знаех, че съществува. +1 за разширяване на познанията ми за рамката .Net. Въпреки че не изглежда, че има начин за изрично сортиране на елементите (от моя поглед към предоставената от вас връзка). Моля, просветете ме, ако греша. - 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