循环浏览字典;为什么我不能按字母顺序获得钥匙?

问题描述

| 我正在使用S7Graphview编写iPhone应用程序,并且已将一些日期和结果作为键和值(作为字符串)存储在.plist中。我的列表如下:
<dict>
<key>2011-05-11</key>
<string>23</string>
<key>2011-05-12</key>
<string>23</string>
<key>2011-05-13</key>
<string>23</string>
<key>2011-05-14</key>
<string>43</string>
<key>2011-06-14</key>
<string>43</string>
</dict>
然后,我使用此循环将这些值加载到graphview中:
NSMutableDictionary* dictionary = [[NSMutableDictionary alloc]init];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
    dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
int i = 1;        

if ([dictionary count] > 0) {
for (Nsstring* key in dictionary){
    Nsstring* verdistring = [dictionary objectForKey:key];
    CGFloat verdi = [verdistring intValue];
    NSDate *dato = [[NSDate alloc]init];
    NSLog(@\"key=%@ value=%@\",key,[dictionary objectForKey:key]);
    dato = [self stringTilDato:key];
    [items.list_ addobject:[[GraphInfo alloc] initWithID:i name:verdistring value:verdi date:dato]];
    i++;
}
}
\“ stringTilDato \”方法将日期字符串转换为NSDate。这些值将以错误的顺序加载到items.list中! NSLog报告:
key=2011-05-14 value=43
key=2011-05-13 value=23
key=2011-05-12 value=23
key=2011-06-14 value=43
key=2011-05-11 value=23
key=2011-05-14 value=43
key=2011-05-13 value=23
key=2011-05-12 value=23
key=2011-06-14 value=43
key=2011-05-11 value=23
(不知道为什么它要两次通过按键,顺便说一句,但我不认为这很重要)。我认为这些键将按字母顺序或至少按plist的顺序进行读取。为什么plist以此顺序加载到字典中,还是问题出在我的加载循环中? 希望那里有人可以帮助我:)     

解决方法

        字典不是有序的数据结构。您可以假定按键没有特定的顺序,添加或删除按键可以完全改变顺序。如果需要有序的数据结构,请使用数组,或者在获取所有键之后对它们进行排序。     ,        NSDictionary的文档特别指出:   数组中元素的顺序   没有定义。 但是,如果要按特定顺序对键进行排序,则至少有三种方法可以返回键的排序数组。在NSDictionary参考页上查找以\“ keysSortedBy ... \”开头的方法     ,        字典不能确保键输出有序。如果要按特定顺序显示键,则必须先对它们进行排序,然后才能访问它们的值并打印结果。