sort NSDictionary values by key alphabetical order

こ雲淡風輕ζ 提交于 2019-11-30 06:30:49

问题


I can get an array of dictionary keys sorted by values, but how to I get an array of values sorted by dictionary keys? I've been looking everywhere with no luck. Any help appreciated.


回答1:


This might work:

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

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

or in Swift

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

or

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

…and that is why you should start developing in Swift 😄




回答2:


One way is to construct the array of sorted dictionary keys, then create another array of the values based on the array of keys:

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

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



回答3:


My experience shows that sorting NSDictionary by keys is not much useful. Although after logging the NSDictionary they seem to be sorted, when needed to put them in a tableview they are not in order any more.

I suggest storing the keys in an NSArray property and then query the NSDictionary objects according to the order of the keys in the NSArray.




回答4:


I created a category on NSDictionary to get this accomplished:

@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


来源:https://stackoverflow.com/questions/7612299/sort-nsdictionary-values-by-key-alphabetical-order

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!