Iphone 如何在Objective-C中快速枚举和比较多个NSArray的对象?

Iphone 如何在Objective-C中快速枚举和比较多个NSArray的对象?,iphone,objective-c,nsstring,nsarray,fast-enumeration,Iphone,Objective C,Nsstring,Nsarray,Fast Enumeration,我的iPhone应用程序的文档文件夹中有许多不同的NSArray存储在.dat文件中,如下所示: john.dat mary.dat bob.dat etc... 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

我的iPhone应用程序的
文档
文件夹中有许多不同的
NSArray
存储在
.dat
文件中,如下所示:

john.dat
mary.dat
bob.dat  etc...
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"
.dat
文件的数量未知,它将根据与用户操作应用程序相关的许多因素而增加或减少

存储在
.dat
文件中的这些
NSArray
的内容是什么?它们包含
NSString的
。重要的是,每个NSArray my的
计数有所不同,如下所示:

john.dat
mary.dat
bob.dat  etc...
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"

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

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

如何将我内存中的新的
NSArray的
(NSArray*john,*mary,*bob
等…与存储在相应
john.dat,mary.dat,bob.dat
中的旧的
etc.文档文件夹中的文件,并通知用户是否修改了任何
NSString的
“2012年6月11日星期一04:52:06 GMT”,“2012年6月12日星期二04:51:59 GMT”,“
等)。


谢谢你的帮助

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


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

好吧,如果您满足于将数组存储为.dat文件(我猜是使用NSKeyedArchiver),那么Martin的答案可能是最好的,也是经过验证的比较方法

我可能采取的方法是将nsstring存储在
NSDictionary
s中,而不是存储在nsarray中。然后,您可以在其值上设置观察者,这样当从比较的XML文件中提取字符串时,如果需要,可以替换,并且将调用观察者,这样您就可以通知用户(请参见
NSNotificationCenter
和KVO,如果还不熟悉)


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

为什么不使用SQLite或类似的方法来存储数据?是的,我可以尝试一下SQLite。感谢您的宝贵见解!与其说是比较本身,还不如说是通过使用
FNSubscribeByPath
函数请求通过更改目录中的文件得到通知。那你就不需要投票来寻求改变了。太好了!我已经在搜索关于SQLite的信息了。也谢谢你的有用评论,我也在考虑所有这些。