阻止NSDictionary对其项目进行排序

时间:2012-03-21 01:54:55

标签: objective-c cocoa sorting nsdictionary

我有这段代码

NSDictionary *tempDict = [NSDictionary dictionaryWithObjects:
[NSArray arrayWithObjects:@"authorId","authorName","authorDescription",@"image",nil] forKeys:
[NSArray arrayWithObjects:@"id",@"name",@"desc",@"image",nil]];
NSLog(@"%@",[tempDict description]);

,输出

desc = authorDescription;

id = authorId;

image = image;

name = authorName;

您会看到字典按字母顺序排序,出于某种原因。这对我来说不好,因为我需要将这个字典添加到plist中,而这个plist已经有一些带有未排序键的字典。那我怎么能避免这种排序?

2 个答案:

答案 0 :(得分:6)

排序归[NSDictionary description]所有,NSLog使用NSDictionary。这不是[dictionary allKeys]的基本特征。如果您通过快速枚举或NSDictionary访问密钥,则不会发现它已排序。

但是对于你的基本问题,如果你想要的是“未分类”(随机),那么“已排序”只是可能的随机序列之一。如果你真的想要排序,那么排序应该无关紧要,因为它是一个子集。

如果排序很重要,那么你的意思并不是“未排序”,你的意思是“其他一些排序顺序,例如插入顺序”。如果您需要以某种方式对NSArray进行排序,则需要将其转换为{{1}}。

答案 1 :(得分:2)

没有排序。它以任意顺序显示。添加更多项目,您可能会看到订单更改。

(在内部,存储可能出于某些疯狂的原因,实际上已经排序,但是你无能为力。)