2011-11-16 54 views
2

我正在使用一个NSMutableDictionary,并且它会根据它的第一个字母自动排序该键的接缝吗?有什么办法可以禁用这个自动排序吗?我尝试更改这些键的位置,并在调用[NSMutableDictionary description]方法时仍遇到同样的问题。NSMutableDictionary禁用排序

谢谢。

+2

为什么要对字典进行排序?字典的要点是,如果你给它一个关键字,它会给你关联的对象,不需要排序/搜索。另外,我确定Apple已经优化了'NSMutableDictionary'对它的对象进行排序的方式,所以你不应该混淆它。 – msgambel

+1

如果对象的排序很重要,那么也许你应该使用一个数组。 –

+0

我在这里进行排序的关注点是因为我将内容用作JSON表示形式,而我不确定这是否需要排序?如果情况并非如此,那么我确定我在设置Post主体或标题时出错。 – kforkarim

回答

6

它仅在输出描述字符串时对键进行排序,它不会更改基于散列表的内存布局。如果您通过它枚举,它将不会被排序,因为它旨在让您快速访问。请参阅this SO post

+0

好吧有道理,现在我的另一个问题来自JSON表示形式,因为我发送两个密钥对值作为“用户名”和“密码”,但在描述中显示为“密码”,“用户名”。因此,JSON甚至需要订购吗?从我记得它不应该是这样,但仍然如此。我使用的是ASIHTTPRequest API,因此它对我来说非常奇怪,因为我仍然无法获得“Post”方法的身份验证。 – kforkarim

+0

通常,JSON“对象”(映射到字典)中的值被认为是无序的。依赖订单的API最好是“作弊”,并且它不太可能,因为API生成器使用字典型界面更容易,而该字典型界面将与订单无关。 (当然,数组值是依赖于顺序的。) –

+0

在NextStep JSON表示(至少是我熟悉的那些)中,排序JSON“数组”或“列表”存储在NSArrays中,NSDictionaries表示顺序无关的属性。 – jbat100