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

Ios 如何维护NSMutableDictionary中添加的键的顺序,ios,objective-c,nsmutabledictionary,Ios,Objective C,Nsmutabledictionary,我一开始并不知道这一点,我以为我添加到字典中的键/值对在我尝试检索它时的顺序是相同的 现在我的问题是—— 我有一个作为singleton制作的ViewController,在这个VC中我定义了: @property (nonatomic) NSMutableDictionary *dictionary; 现在,我尝试从各种其他类访问此词典,并通过以下方式设置其内容: [[[ViewController sharedViewController] dictionary] setValue:[NS

我一开始并不知道这一点,我以为我添加到字典中的键/值对在我尝试检索它时的顺序是相同的

现在我的问题是——

我有一个作为singleton制作的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]
这正在发生。。但我在字典中添加项目的顺序没有保持。。。我怎样才能做到这一点??我需要保持顺序,就像我第一次将我的项目添加到字典中一样


有人能帮我一下吗?

NSDictionary
只是键和值之间的映射,没有定义顺序。如果您尝试对键进行迭代,则可能会或可能不会以添加键的相同顺序将它们取回,并且在对键进行迭代时不应依赖于键的顺序

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


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

如前所述,您应该使用
NSArray
对值进行排序。您也可以使用一些第三方API,如:或其他API,但是,这不是一个很好的解决方案


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

您可以使用以下代码复制密钥:

NSArray *allKeys = [dictionary allKeys];

然后,所有键都按顺序保存,您可以通过在allKeys数组中获取特定键并使用
字典[allKeys[2]]

检索来访问特定值阅读文档。NSDictionary是无序的。除此之外,您的描述毫无意义。这如何保持添加值的顺序?添加新值时,您应该同时向数组添加键。
-[NSDictionary allKeys]
的文档明确指出:“数组中元素的顺序未定义。”,因此,您永远不要期望
allKeys
返回的数组与您添加它们的顺序相同。然后,您可以定义一种新的数据类型,包括字典和可变顺序集。定义一个自定义函数,将键和值添加到字典中,同时将键添加到有序集。这是标准方法,是的。将数组用于表视图数据源,并在显示时将其值用作字典中的键。这里有很多问题。