我一开始并不知道这一点,我认为当我尝试将其检索回来时,我添加到字典中的键/值对将采用相同的顺序...
现在这是我的问题 -
我有一个ViewController,我把它作为单身人士,在我定义的VC中:
@property (nonatomic) NSMutableDictionary *dictionary;
现在我尝试从其他各种类中访问这个字典,并通过以下方式设置其内容:
[[[ViewController sharedViewController] dictionary] setValue:[NSNumber numberWithBOOL:NO] forKey:@"xx"] , yy ,zz and so on
我已经实现了我的代理,它会针对特定的密钥(xx,yy,zz等)。现在每当一个特定的委托方法被命中时,我需要用相同的密钥更新我的字典,但[NSNumber numberWithBOOL:YES]
正在发生..但是我在字典中添加项目的顺序没有得到维护...我怎样才能实现这一点??我需要按照我在第一时间将项目添加到字典中的方式来维护顺序吗?
有人可以帮帮我吗?
答案 0 :(得分:2)
如上所述,您应该使用NSArray
来订购您的值。您也可以使用某些第三方API,例如:M13OrderedDictionary或其他,但这不是一个漂亮的解决方案。
显然,理想的解决方案是创建自己的对象或结构,并保留这些对象/结构的数组。
答案 1 :(得分:0)
NSDictionary
只是没有定义顺序的键和值之间的映射。如果您尝试迭代键,您可能会或可能不会按照添加它们的顺序将它们恢复,并且在迭代时不应该依赖键的顺序。
您可以做的一件事是创建一个NSArray
,其中包含您想要的顺序的键。然后,您可以迭代数组中的键,并按照您想要的顺序从NSDictionary
获取值。这两者的组合基本上为您提供了一个排序键NSDictionary
。
您可以做的另一件事是只使用NSArray
来存储值,除非您使用的键也很重要。但是,如果您要做的只是按特定顺序获取值,那么我会说NSArray
应该可以正常工作。
答案 2 :(得分:0)
您可以使用以下代码制作密钥副本:
NSArray *allKeys = [dictionary allKeys];
然后,所有键都按顺序保存,您可以通过获取allKeys数组中的特定键并使用dictionary[allKeys[2]]
检索它来访问特定值。