根据数字重新组织NSDictionary键

时间:2012-02-03 20:34:05

标签: objective-c ios cocoa-touch nsdictionary

我有一个NSDictionary,看起来像:

0 =     {
        content = Test;
        date = "2012-02-02 18:36:46 +0000";
    };
    1 =     {
        content = "#### da ####";
        date = "2012-02-02 18:36:46 +0000";
    };
    2 =     {
        content = dfdffdfddfdffddf;
        date = "2012-02-03 20:30:31 +0000";
    };

但是如果我删除第二个键(示例中的数字1),字典最终会像:

0 =     {
    content = Test;
    date = "2012-02-02 18:36:46 +0000";
};
2 =     {
    content = dfdffdfddfdffddf;
    date = "2012-02-03 20:30:31 +0000";
};

我怎样才能重新组织它们以便在需要时保持顺序(如0,1,2,3)?

1 个答案:

答案 0 :(得分:4)

NSDictionaries是无序的,这意味着您无法控制密钥的顺序,并且它们可能会在iOS版本之间随机或以未记录的方式更改。

您有几个选择:

  1. 维护您自己独立的NSArray密钥,并使用它来索引您的字典。

  2. 使用我编写的这个OrderedDictionary类,它基本上是这样做的,但是在NSDictionary子类中包装它所以你不需要做任何额外的工作:

    http://charcoaldesign.co.uk/source/cocoa#ordered-dictionary

  3. 如果您的字典键是数字(或者它们是按字母顺序排列的,或者其他易于自动排序的字符),您可以在需要按顺序显示它们时对其进行排序:

    NSArray *keys = [dict allKeys];
    keys = [keys sortedArrayUsingSelector:@selector(compare:)];
    //now loop over keys array instead of directly over dictionary