我在NSMutableDictionary中面临非常奇怪的问题。请参阅以下代码。
NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
[dict setValue:@"India" forKey:(@"Title")];
[dict setValue:@"Done" forKey:(@"Status")];
当我打印这个字典对象时,它显示如下。
{
Status =Done,
Title=India;
}
这个键被洗牌,实际上Title键应该是第一个。
那么,我该如何解决这个问题。
答案 0 :(得分:1)
这不是问题。
您误解了或{0} {}错误。 NSDictionary
是一个容器,用于存储基于键的值。
因此,不需要任何订单或索引。
背后的原因是,如果您知道密钥,则只能访问容器值。所以检查那些键的顺序意义不大。因为您必须使用该密钥来访问相关值。
现在关于订单 - 使用NSDictionary
代替更多使用NSArray
NSArray
的对象。这样你就可以获得字典支持的订单。
下面对字典键进行排序的方法如下:
NSDictionary
答案 1 :(得分:0)
NSDictionary或NSMutableDictionary不保证对其键/值对进行任何排序。没有办法按键设置顺序保存键/值,NSDictionary或NSMutableDictionary无法像这样工作。 (您使用键而非索引来检索值。)
如果您希望按特定顺序显示值或键以进行显示,则可以在检索它们之后对它们进行排序:
NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingSelector:... ] ;
或
NSArray * sortedKeys = [ [ myDictionary allKeys ] sortedArrayUsingComparator:... ] ;
然后,您可以根据需要检索已排序键的关联对象。
另一种选择是维护2个独立的数组,一个用于键,一个用于值,并保持顺序。