我想要做的是创建一个NSMutableSet,其目的是计算有多少对唯一数据.
基本上,我有两个可变数组; xCoordinates和yCoordinates,以及一个名为的自定义对象XYPoint.重合索引处的每个X坐标和Y坐标组合在笛卡尔平面上形成一个点.例如,在索引2处,xCoordinates数组中可能存在数字4,而yCoordinates数组中可能存在数字8,从而形成点(4,8).
现在,问题的关键,我想要做的是检查有多少独特的点.我打算用一个NSMutableSet来做.即:
for (int i = 0; i < [xCoordinates count]; i++) {
XYPoint *newXY = [[XYPoint alloc] init];
newXY.xCoordinate = [xCoordinates objectAtIndex:i];
newXY.yCoordinate = [yCoordinates objectAtIndex:i];
if ([distinct containsObject:newXY] == NO) {
[distinct addObject:newXY];
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.有没有办法说;
if (there isn't an object in the set with an identical X coordinate property and Y coordinate property){
Add one to the set;
}
Run Code Online (Sandbox Code Playgroud)
?
在测试成员资格时,NSSet调用使用isEqual.
NSSet并且isEqual是NSObject协议的一部分.
如果你的XYPoint类派生自NSObject,它继承了基于指针相等性的默认isEqual:implementation.它比较内存地址以测试2个对象是否相同.
由于您的比较标准是位置,您必须isEqual:在XYPoint类中覆盖并返回hash2个对象的x/y坐标是否相同.
另请参阅收藏集编程主题.还有一篇关于Mike Ash的平等和散列的非常详细的帖子.
更新
正如JeremyP在评论中指出的那样,您应该始终提供isEqual:覆盖时的实现YES.细节在上面的Mike Ash文章中有解释.在Stack Overflow上
还有一个问题讨论坐标的好散列函数.
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |