如何维护NSMutableDictionary中添加的键的顺序

时间:2015-05-22 13:49:59

标签: ios objective-c nsmutabledictionary

我一开始并不知道这一点,我认为当我尝试将其检索回来时,我添加到字典中的键/值对将采用相同的顺序...

现在这是我的问题 -

我有一个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]正在发生..但是我在字典中添加项目的顺序没有得到维护...我怎样才能实现这一点??我需要按照我在第一时间将项目添加到字典中的方式来维护顺序吗?

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

如上所述,您应该使用NSArray来订购您的值。您也可以使用某些第三方API,例如:M13OrderedDictionary或其他,但这不是一个漂亮的解决方案。

显然,理想的解决方案是创建自己的对象或结构,并保留这些对象/结构的数组。

答案 1 :(得分:0)

NSDictionary只是没有定义顺序的键和值之间的映射。如果您尝试迭代键,您可能会或可能不会按照添加它们的顺序将它们恢复,并且在迭代时不应该依赖键的顺序。

您可以做的一件事是创建一个NSArray,其中包含您想要的顺序的键。然后,您可以迭代数组中的键,并按照您想要的顺序从NSDictionary获取值。这两者的组合基本上为您提供了一个排序键NSDictionary

您可以做的另一件事是只使用NSArray来存储值,除非您使用的键也很重要。但是,如果您要做的只是按特定顺序获取值,那么我会说NSArray应该可以正常工作。

答案 2 :(得分:0)

您可以使用以下代码制作密钥副本:

NSArray *allKeys = [dictionary allKeys];

然后,所有键都按顺序保存,您可以通过获取allKeys数组中的特定键并使用dictionary[allKeys[2]]检索它来访问特定值。