NSMutableDictionary键值被洗牌

时间:2014-11-25 07:19:55

标签: ios iphone key-value nsmutabledictionary

我在NSMutableDictionary中面临非常奇怪的问题。请参阅以下代码。

 NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
 [dict setValue:@"India" forKey:(@"Title")];
 [dict setValue:@"Done" forKey:(@"Status")];

当我打印这个字典对象时,它显示如下。

{
Status =Done,
Title=India;
}

这个键被洗牌,实际上Title键应该是第一个。

那么,我该如何解决这个问题。

2 个答案:

答案 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个独立的数组,一个用于键,一个用于值,并保持顺序。