Objective c 按键字母顺序对NSDictionary值排序
我可以获得按值排序的字典键数组,但是如何获得按字典键排序的值数组呢?我到处找,运气都不好。感谢您的帮助。这可能有用:Objective c 按键字母顺序对NSDictionary值排序,objective-c,swift,nsdictionary,Objective C,Swift,Nsdictionary,我可以获得按值排序的字典键数组,但是如何获得按字典键排序的值数组呢?我到处找,运气都不好。感谢您的帮助。这可能有用: NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)]; NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]]; 还
NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]];
还是迅速 或
let objects=dict.sorted{$0.0<$1.0}.map{$1}
…这就是为什么您应该开始使用Swift进行开发的原因,一种方法是构造排序字典键数组,然后基于键数组创建另一个值数组:
//Construct array of sorted keys
NSArray keyarray = ... //etc
NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
[valuearray addObject:[dict objectForKey:key]];
}
我的经验表明,按键排序
NSDictionary
没有多大用处。尽管在日志记录之后NSDictionary
似乎对它们进行了排序,但当需要将它们放入tableview时,它们就不再有序了
我建议将键存储在NSArray
属性中,然后根据NSArray
中键的顺序查询NSDictionary
对象。我在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
你字典里的值是什么?它们是c类型还是对象?NSNumber对象是值。我只需要对键进行排序,然后根据排序的值创建一个对象数组。我同意并考虑了这一点,但希望找到一个更优雅的解决方案,不需要枚举。这对我来说太难了。还不确定原因。***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\u NSCFDICTIONAL OBJECTS ORKEYS:notFoundMarker:::]:标记为nil'
看起来NOTFOUNDMAKER必须包含某些内容。我猜它包含的内容在这个例子中是不相关的,因为钥匙总是可以找到的。更新了我的答案。这个方法是多余的,你可以直接从字典中得到一个排序数组,而不需要先调用allKeys@XAleXOwnZX-见下文我对您答案的评论。
//Construct array of sorted keys
NSArray keyarray = ... //etc
NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
[valuearray addObject:[dict objectForKey:key]];
}
@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