我的问题是......
我有从XML文件中提取并解析然后存储在数组中的数据。
此数据每隔约60分钟更新一次。
现在我创建了第二个数组,它解析相同的数据,但每周只解析一次。
现在发生的事情是我有一个每60分钟更新一次的阵列,另一个每7天更新一次。
原因在于,我正在做一个团队表,我想检查一个团队在积分榜上的上升或下降。
所以我的第一个问题已经解决,我有2个阵列,其中一个团队拥有最新数据,另一个拥有一周的数据。
我的第二个问题是如何比较这些对象索引?每个对象都有许多属性,如.name或.teamid
有人可以提供一个示例代码,介绍如何将ArrayA Object.name与ArrayB.name进行比较吗?
非常感谢你。
答案 0 :(得分:0)
你的问题令人困惑;显然你已经编写了一个应用程序,它能够从XML文件中提取数据,解析它,创建一个数组,并按照时间表完成所有这些,但又不知道如何比较两个项目?这听起来像是我误解了你的问题!所以这是一个猜测,也许它会有所帮助:
Cocoa具有对象相等的模式 - 两个方法isEqual:
和hash
一起工作,以提供一种标准化的方法来测试两个对象实例是否是"等于",无论对象代表什么意味着什么。
这些方法由所有标准类提供,因此您可以测试两个NSString
实例是否表示相同的字符串等。对于诸如NSArray
之类的集合类,其isEqual:
方法比较两个数组中的元素通过调用它们的isEqual:
方法等成对。
基类NSObject
提供了一个默认实现,但由于它无法知道哪个相等对于特定类意味着它的实现是非常基本的 - 当且仅当它们是完全相同的对象时,两个对象是相等的,即[a isEqual:a]
是YES
,其他没有。
所以你需要为你的类提供一个isEqual:
和(这是很重要的)hash
对,它实现了你的类的相等 - 这可能是定义的就某些属性而言,例如您提到的name
,并会调用他们的isEqual:
方法。
当然,如果您的班级相等只是基于其中一个属性,例如name
,则实施isEqual:
& hash
是微不足道的 - 实现只是在该属性上调用相同的方法。在这种情况下,您甚至不需要自己实施该对,您可以访问该属性可以直接比较它。类似的东西:
NSUInteger indexOfInterest = ...;
MyClass *objectA = arrayA[indexOfInterest];
MyClass *objectB = arrayB[indexOfInterest];
BOOL itemsAreEqual = [objectA.name isEqual:objectB.name];
如果您的属性不是对象类型,而是某些基本类型,例如int
,那么您只需使用标准相等运算符:
BOOL itemsAreEqual = objectA.name == objectB.name;
阅读:来自Apple的 Cocoa Core Competencies 的Object Comparison。