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



我有许多不同的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"

等。。

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

由于我有很多.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",等)已被修改?

感谢您的帮助!

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

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

好吧

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

我可能采取的方法是将NSStrings存储在NSDictionary而不是NSArrays中。然后,您可以对其值设置观察器,因此当从您比较的 XML 文件中提取字符串时,如有必要,请替换,并且将调用观察器,以便您可以通知用户(如果还不熟悉,请参阅 NSNotificationCenter 和 KVO)。

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

最新更新