objective-c - 禁用NSDictionary排序

标签 objective-c ios nsdictionary

我创建了一个NSDictionary,在其中放置了一些对象和键。但是问题是,按照我的理解,键是按键的首字母排序的。例如,我输入“G”,“B”,“C”。因此,它将它们排序并显示为“B”,“C”,“G”。我想禁用排序,我该怎么做。我正在处理更复杂的示例,但我想使问题简化。
问题:如何在NSDictionary中禁用排序,或者如何自己对NSDictionary排序?

提前致谢!

最佳答案

如@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]);
}

结果应显示字典中的每个条目,并按每个条目中的值排序。

关于objective-c - 禁用NSDictionary排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420362/

相关文章:

objective-c - NSMutableDictionary 添加子项

ios - 如何对 NSMutableURLRequest 发出第二个请求?

ios - 如何在 iOS 上构建大版本的信息按钮?

ios - 升级项目 ios8 Xcode 6.0.1

c++ - 在具有可变参数的方法中转换警告

ios - 如何比较 NSDictionary 和 String 的值

iphone - 如何在 MKMapView 中关闭 MKAnnotation 的标注

objective-c - 沿着斜坡移动 Sprite

ios - 属性(property)还是非属性(property)?

ios - Swift Play 视频无法显示