сортировка словаря по дочернему ключу - PullRequest
2 голосов
/ 25 июня 2011

Я понимаю, как отображать отсортированный по словарям контент посредством получения allKeys в NSMutableArray, сортировки массива и использования его в качестве индекса в словаре, но ....

Что если я хочусортировать родительские ключи по одному из их дочерних ключей?

например, словарь с родительскими ключами @ "8979", @ "6754", @ 8776 ", @" 9076 "и т. д. имеют дочерний ключ /пары значений, такие как:

@ "pos", 8 @ "pos", 4 @ "pos", 10 @ "pos", 7

и т. д.

Я знаю, как отсортировать родительские ключи: @ "6754", @ "8776", @ "8979", @ "9076"

, но как отсортировать родительские ключи на основе их соответствующих @ "pos"дочерний ключ, приводящий к: @" 6754 ", @" 9076 ", @" 8979 ", @" 8776 "

???

Ответы [ 3 ]

4 голосов
/ 24 декабря 2011

Вы можете упростить это до одной строки:

NSArray *sortedArray = [keySort keysSortedByValueUsingComparator: ^(id obj1, id obj2) {
    return [(NSString *)obj1 compare:(NSString *)obj2];
}];
3 голосов
/ 27 июня 2011

Это, кажется, делает трюк для меня ....

 NSArray *sortedArray = [keySort keysSortedByValueUsingComparator: ^(id obj1, id obj2) {

    NSString *p1 = [obj1 objectForKey:@"pos"];
    NSString *p2 = [obj2 objectForKey:@"pos"];

    if (p1 > p2 ) {
        return (NSComparisonResult)NSOrderedDescending;

    }

    if (p1 < p2) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];
3 голосов
/ 25 июня 2011

keysSortedByValueUsingSelector: позволит вам предоставить компаратор, которому передаются значения из вашего словаря и возвращается упорядоченный массив ключей.

...