按子键排序字典

时间:2011-06-24 20:26:12

标签: iphone nsmutabledictionary sorting

我理解如何通过将allKeys获取到NSMutableArray中来显示字典排序内容,对数组进行排序并将其用作字典的索引,但是....

如果我想通过其中一个子键对父键进行排序,该怎么办?

例如,具有父键@“8979”,@“6754”,@ 8776“,@”9076“等的字典具有子键/值对,如:

@“pos”,8 @“pos”,4 @“pos”,10 @“pos”,7

等等。

我知道如何将父键排序为:@“6754”,@“8776”,@“8979”,@“9076”

但是如何根据各自的@“pos”子键对父键进行排序,从而导致: @“6754”,@“9076”,@“8979”,@“8776”

???

3 个答案:

答案 0 :(得分:4)

您可以将其简化为一行:

NSArray *sortedArray = [keySort keysSortedByValueUsingComparator: ^(id obj1, id obj2) {
    return [(NSString *)obj1 compare:(NSString *)obj2];
}];

答案 1 :(得分:3)

keysSortedByValueUsingSelector:将允许您提供一个比较器,该比较器从您的字典中传递值并返回一个有序的键数组。

答案 2 :(得分:3)

这似乎对我有用了....

 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;
}];