0

同じ中心を持つ 2 つ以上のオブジェクトを持つカスタム UIView オブジェクトの配列があり、そこから別個の中心を持つ別の配列を作成する必要があります。それを行う最良の方法は何ですか?

以下のコードで試しましたが、うまくいきません。

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];
     }
}
4

2 に答える 2

1

structの (あなたの場合centerは a CGPoint) を で使用することはできませんNSPredicate。また、浮動小数点値を直接比較することもお勧めできません。この回答に従う必要があります。、など[annotation coordinate].latitudeに置き換えるだけです。簡単なはずです。myView.center.x[annotation coordinate].longitudemyView.center.y

ところで、コードには O(n^2) の複雑さがありますが、配列が小さい場合は問題にならないかもしれません。

于 2013-10-13T19:14:59.397 に答える
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];
    }
}
于 2013-10-13T23:01:09.657 に答える