我有一组自定义UIView对象,其中2个或更多对象具有相同的中心,我必须从中构造另一个具有不同中心的数组。最好的方法是什么?
我尝试使用下面的代码,但它不起作用。
self.distinctObjects = [NSMutableArray arrayWithCapacity:iAllObjects.count];
for (MyCustomView *customView in iAllObjects)
{
BOOL hasDuplicate = [[self.distinctObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.center == %@", customView.center]] count] > 0;
if (!hasDuplicate) {
[self.distinctObjects addObject:customView];
}
}
答案 0 :(得分:1)
您无法在struct
中使用center
(在您的情况下CGPoint
是NSPredicate
)。另外直接比较浮点值也不是一个好主意。
您应该关注this answer。只需将[annotation coordinate].latitude
替换为myView.center.x
,将[annotation coordinate].longitude
替换为myView.center.y
,依此类推。应该很容易。
BTW您的代码具有O(n ^ 2)复杂度,但如果数组很小,也许这不是问题。
答案 1 :(得分:0)
我用以下代码解决了这个问题:
NSMutableArray *uniqueCenters = [NSMutableArray arrayWithCapacity:iAllObjects.count];
self.distinctObjects = [NSMutableArray arrayWithCapacity:iAllObjects.count];
for (MyCustomView *customView in iAllObjects)
{
if (![uniqueCenters containsObject:[NSValue valueWithCGPoint:customView.center]]) {
[uniqueCenters addObject:[NSValue valueWithCGPoint:customView.center]];
[self.beacons addObject:customView];
}
}