如何在Objective-C中快速枚举和比较许多NSArrays的对象?

时间:2012-06-13 13:33:09

标签: iphone objective-c nsstring nsarray fast-enumeration

我在NSArray文件中存储了多个不同的.dat,位于我的iPhone应用程序的Documents文件夹中,如下所示:

john.dat
mary.dat
bob.dat  etc...

.dat个文件的数量未知,并会根据与用户操作应用程序相关的多个因素而增加或减少。

NSArray's文件中存储的这些.dat的内容是什么?它们包含NSString's。重要的是要说每个NSArray的count变化,如下:

john.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",
"Wed, 13 Jun 2012 04:52:30 GMT",
"Thu, 07 Jun 2012 04:52:00 GMT",


mary.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",


bob.dat Contains this array of strings:
"Mon, 11 Jun 2012 04:52:06 GMT",
"Tue, 12 Jun 2012 04:51:59 GMT",
"Wed, 13 Jun 2012 04:52:30 GMT",
"Thu, 07 Jun 2012 04:52:00 GMT",
"Fri, 08 Jun 2012 04:51:59 GMT",
"Sun, 10 Jun 2012 04:50:55 GMT"

等。

我必须定期验证这些NSString中的每个NSArray's是否已被修改,以通知用户某些事件。在从Internet进行XML解析之后,我已经能够在内存中拥有与之前存储在NSArray's文件夹中的相应.dat文件相对应的新Documents

由于我有很多 .dat个文件,我的问题是:

如何比较 有效和一时 新的NSArray's (NSArray *john, *mary, *bob等。 .. )我在内存中(由于这种XML解析),旧的存储在相应的john.dat, mary.dat, bob.dat等... 文件中Documents文件夹并通知用户是否修改了NSString's"Mon, 11 Jun 2012 04:52:06 GMT","Tue, 12 Jun 2012 04:51:59 GMT", 等... )?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您乐意更改.dat文件的格式,可以计算每个数组内容的哈希值并将其存储在文件的开头。获得新数据后,您可以计算其哈希值,并将其与存储在文件中的哈希值进行比较。

您选择的散列函数将决定计算效率,但I / O将被最小化。

答案 1 :(得分:1)

好吧,如果你满足于将你的数组存储为.dat文件(我猜的是NSKeyedArchiver),那么Martin的回答可能是最好的,而且是经过验证的真实比较方法

我可能采取的方法是将NSStrings存储在NSDictionary s而不是NSArrays中。然后你可以在它的值上设置一个观察者,所以当你从比较的XML文件中提取一个字符串时,必要时替换并调用观察者,这样你就可以通知用户(如果没有,请参见NSNotificationCenter和KVO)熟悉)。

将文件串存储在CoreData中可能也是有益的(通常是),而不是.dat文件,然后您可以配置NSFetchedResultsController以关注数据并在新数据时执行上述操作取出。