5

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

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

我怎么能这样做?

任何帮助表示赞赏。

4

3 回答 3

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

于 2013-01-24T11:48:28.110 回答
0

像这样的东西:

static int index;
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]];
于 2013-01-24T11:51:18.080 回答
0

您要么需要:

  • 按照您添加它们的顺序,通过维护一个键数组来单独跟踪顺序。
  • 将订单添加为要存储在字典中的对象的属性。

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

于 2013-01-24T11:55:11.290 回答