25

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

4

4 回答 4

45

这可能有效:

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

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

或在斯威夫特

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

或者

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

…这就是为什么你应该开始使用 Swift 开发

于 2011-09-30T15:11:59.487 回答
2

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

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

NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
    [valuearray addObject:[dict objectForKey:key]];
}
于 2011-09-30T15:13:40.283 回答
2

我的经验表明,NSDictionary按键排序并没有多大用处。尽管在logging它们NSDictionary似乎已排序之后,当需要将它们放在 tableview 中时,它们不再是有序的。

我建议将键存储在NSArray属性中,然后NSDictionary根据NSArray.

于 2012-07-28T03:11:45.717 回答
1

我在 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
于 2014-04-23T08:51:32.773 回答