NSDictionary循环顺序

时间:2014-02-28 00:29:49

标签: objective-c loops nsdictionary

我正在循环一个包含名为1,2,3等字典的NSDictionary。我遇到的问题是,在循环浏览它们时,它们不会保持顺序。有没有办法在循环时保持数字顺序?感谢。

代码:

NSDictionary *theDict = [thePreviousKey objectForKey:@"stayInLine"];

    for(NSString *key in theDict) {

     [self doThis:key];

     // expected result (do 1, 2, 3, etc.)
     // actual result (1, 3, 2, etc.)

    }

plist中:

<dict>
    <key>randomStuff</key>
    <dict>
        <key>specificStuff</key>
        <dict>
            <key>stayInLine</key>
            <dict>
                <key>1</key>
                <dict>
                    <key>thing</key>
                    <data>
                    data==
                    </data>
                </dict>
                <key>2</key>
                    <dict>
                    <key>thing</key>
                    <data>
                    data==
                    </data>
              </dict>
           </dict>
        </dict>
    </dict>
</dict>

1 个答案:

答案 0 :(得分:6)

NSDictionary不维护有序的键列表。枚举字典中的键时,枚举键的顺序是未定义的。

解决方案是首先自己对键进行排序。像这样:

NSArray *keys = [[theDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (NSString *key in keys) {
   [self doThis:key];
}