按键字母顺序排序NSDictionary值

时间:2011-09-30 15:00:52

标签: objective-c swift nsdictionary

我可以获取按值排序的字典键数组,但是如何获取按字典键排序的值数组?我一直在寻找没有运气的地方。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:44)

这可能有效:

NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];

NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]];

或在Swift中

let objects = dict.keys.sorted().flatMap{ dict[$0] }

let objects = dict.sorted{ $0.0 < $1.0 }.map{ $1 }

......这就是你应该开始在Swift中开发的原因

答案 1 :(得分:2)

一种方法是构造排序字典键数组,然后根据键数组创建另一个值数组:

//Construct array of sorted keys
NSArray keyarray = ... //etc

NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
    [valuearray addObject:[dict objectForKey:key]];
}

答案 2 :(得分:2)

我的经验表明,按键排序NSDictionary并没有太大用处。虽然logging NSDictionary之后它们似乎已被排序,但如果需要将它们放入桌面视图中,则它们不再有序。

我建议将密钥存储在NSArray属性中,然后根据NSDictionary中的密钥顺序查询NSArray个对象。

答案 3 :(得分:0)

我在NSDictionary上创建了一个类别,以实现这一目标:

@implementation NSDictionary (Extra)

-(NSArray *) sortedKeys {
    return [[self allKeys] sortedArrayUsingSelector:@selector(compare:)];
}

-(NSArray *) allValuesSortedByKey {
    return [self objectsForKeys:self.sortedKeys notFoundMarker:[NSNull null]];
}

-(id) firstKey {
    return [self.sortedKeys firstObject];
}

-(id) firstValue {
    return [self valueForKey: [self firstKey]];
}

@end