我创建了一个 NSDictionary,我放了一些对象和键。但问题是键是按我理解的键的第一个字母排序的。例如,我输入“G”、“B”、“C”。因此,它将它们分类并显示为“B”、“C”、“G”。我想禁用排序,我该怎么做。我正在处理更复杂的示例,但我想在我的问题中保持简单。 问题:如何禁用 NSDictionary 中的排序,或者我如何自己对 NSDictionary 进行排序?
提前致谢!
我创建了一个 NSDictionary,我放了一些对象和键。但问题是键是按我理解的键的第一个字母排序的。例如,我输入“G”、“B”、“C”。因此,它将它们分类并显示为“B”、“C”、“G”。我想禁用排序,我该怎么做。我正在处理更复杂的示例,但我想在我的问题中保持简单。 问题:如何禁用 NSDictionary 中的排序,或者我如何自己对 NSDictionary 进行排序?
提前致谢!
“排序”不是 an 所NSDictionary
知道的,如果您希望数据按特定顺序排列,则应该使用NSArray
an
正如@Dan F 所说, NSDictionary 不会对其条目进行排序。正如@Hot Licks 在评论中所述,NSDictionary 将其内容按任意顺序排列。你永远不应该假设字典中条目的顺序。NSArray 更适合这种事情。
如果您真的想以某种预定义的排序顺序显示字典的内容,您可以获取使用与它们关联的值排序的键数组。NSDictionary 类具有支持这一点的keysSortedByValueUsingSelector:
和keysSortedByValueUsingComparator:
方法。因此,如果您想通过将值按升序排序来控制显示顺序,您可以执行如下操作:
NSArray *orderedKeys = [myDictionary keysSortedByUsingSelector:@selector(caseInsensitiveCompare:)];
for (int i = 0; i < [sortedKeys count]; i++) {
NSString *key = [sortedKeys objectAtIndex:i];
NSLog(@"%@ = %@", key, [myDictionary objectForKey:key]);
}
结果应显示字典中的每个条目,并按每个条目中的值排序。