订购NSDictionary

时间:2013-01-24 11:46:19

标签: cocoa nsdictionary hashtable

如何保留将对象添加到NSDictionary的方式?

我意识到NSDictionary中的值没有特定的顺序,但在我的情况下,我需要保留使用setValue:forKey:添加的顺序,就像数组一样。

我怎么能这样做?

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

字典是哈希映射的,以便更快地检索。您无权修改其订单。

如果您想按顺序存储,则应使用数组。

或者你必须使用一些复杂的方法,继续使用键附加int orderNumber(你需要在每个setObject / setValue之后递增它)。存储和检索:

NSDictionary *dict=[NSDictionary new];
NSString *key=....;
[dict setValue:@"some  value" forKey:[NSString stringWithFormat:@"%d-%@",orderNumber, key]];

或者,您可以使用每个索引具有一个字典的数组。


另一种方法是将自定义类用作

@interface ....
    @property(...) NSInteger index;
    @property(...) NSString *key;
    @property(...) id object;
    // and methods to retrieve based on key, based on index etc
@end

编辑2:

发现与我一年前发布的内容非常相似,请参阅此OrderedDictionary

答案 1 :(得分:0)

类似的东西:

static int index;
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]];

答案 2 :(得分:0)

您需要:

  • 按照您添加的顺序维护一系列密钥,单独跟踪订单。
  • 将订单添加为您存储在字典中的对象的属性。

我更喜欢第二种方法,因为它将所有信息保存在一个地方。如果您未定义要存储的对象,则可能需要创建该对象的子类,或使用其他 order 成员将其封装在您自己的一个对象中。