Сортировка NSDictionary по количеству дочерних элементов на ключ - PullRequest
0 голосов
/ 15 сентября 2011

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

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

2 способа, которыми я хотел бы иметь возможность сортировать словарь:

1) Сортировать его так, чтобы ключ «Австралия» шел первым, потому чтоу него есть 3 города, затем США с 2 городами и, наконец, Великобритания с 1 городом?

2) В качестве бонуса я также хотел бы иметь возможность сортировать по количеству объектов, т.е. сначала Австралия с 6 объектамизатем Великобритания с 4 объектами (хотя только 1 город), затем США с 2 объектами.

"United Kingdom" = {
    "City 1" = {
        1 = "Object A";
        2 = "Object B";
        3 = "Object C";
        4 = "Object D";
    };
};
"Australia" = {
    "City 1" = {
        5 = "Object E";
        6 = "Object F";
        7 = "Object G";
    };
    "City 2" = {
        8 = "Object H";
        9 = "Object I";
    };
    "City 3" = {
        10 = "Object J";
    };
};
"United States of America" = {
    "City 1" = {
        11 = "Object K";
    };
    "City 2" = {
        12 = "Object L";
    };
};

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Предполагая, что вы храните массивы в словаре, вы можете сделать что-то вроде этого:

NSComparator sorter = ^NSComparisonResult(id a, id b)
{
    NSArray* a1 = a;
    NSArray* a2 = b;
    if([a1 count] > [a2 count]) return NSOrderedAscending; 
    if([a1 count] < [a2 count]) return NSOrderedDescending; 
    return NSOrderedSame;
}

NSArray* ordered = [dictionary keysSortedByValueUsingComparator:sorter];

Затем в «упорядоченном» массиве вы получите ключи к словарю в порядке увеличения количества элементов в массивах, хранящихся в словаре.

0 голосов
/ 15 сентября 2011

NSDictionary - это коллекция Key-Value.Это не сортируется.Вместо этого вам придется преобразовать его в NSArray (из NSArrays).

Для NSArray вы найдете несколько способов сортировки:

...