2012-04-03 26 views
0

目标是创建一个数组,其中所有字符串的长度均为n。从plist中读入,但只接受某些字符串

因此,目前我的代码所做的工作是将plist(只有250,000个字符串)读入一个数组,然后遍历数组以找出哪些长度不是n 。当然,为了提高效率,我宁愿能够从plist中读入字符串,因此,在读入数据时,我可能会在插入数组之前插入长度。我刚刚开始学习Objective-C,但我一直在努力寻求解决方案谷歌周围= P

编辑:好吧,我只是发现我可以找到更多的文档键入属性列表而不是plist进入谷歌:)所以我可以自己弄清楚这个问题

+1

这很好,如果你发现你的自我。如果您将解决方案发布为答案或接受其他答案,则表示感谢。 – 2012-04-03 08:15:49

+0

阅读文档之后的当前假设是,没有专门的解析方法 - 基本上在整个文件中读取,然后从那里做东西(而不是在C中,可以逐行阅读/ char by char各种fget)。因此,NeverBe在下面提出的方法对我来说似乎足够了 - 我不必再遍历它两次,因为我在读取时存储了长度;我的原始 – Paul 2012-04-03 08:19:10

回答

3

你可以将plist解析为树(NSMutableDictionary)。字典将具有字符串长度名称的键。

例如

NSMutableDictionary *result = [NSMutableDictionary dictionary]; 

for (NSString *str in [plistDict allObjects]) { 

    NSString *key = [NSString stringWithFormat:@"%d", [str length]]; 

    NSMutableArray *array = [result objectForKey:key]; 
    if (!array) { 
     array = [NSMutableArray array]; 
    } 
    [array addObject:str]; 
    [result setObject:array forKey:key]; 
} 

比你可以访问阵列所需的字符串长度

NSArray *string4Lenght = [result objectForKey:@"4"]; 
+0

的重复循环升级哦哇这是一个非常聪明的解决方案。谢谢=] – Paul 2012-04-03 08:13:43

1

苹果不会为增量解析plist中提供的API。

如果以XML格式存储plist,则可以使用NSXMLParser来解析它。该架构非常简单,并在Property List Programming Guide中有所描述。

如果你想递增地解析二进制格式,你将不得不做更多的工作。该格式没有官方文档。 Apple用于读写格式的源代码是开源的(CFBinaryPList.c),并且有一些有用的评论以及实际的代码。

如果你确实需要逐步做,我建议去XML路线。如果这样做,您可能想要继承NSInputStream以便能够从gzip或bzip2文件中读取数据并在运行时进行解压缩。