Iphone 如何在Objective-C中快速枚举和比较多个NSArray的对象?
我的iPhone应用程序的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
文档
文件夹中有许多不同的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的信息了。也谢谢你的有用评论,我也在考虑所有这些。