-4

次のタスクを達成するための最も効率的な方法を探しています...

タイプ のオブジェクトの配列がありFoo、他のプロパティの中でFooも alatitudeと alongitudeプロパティがあります。多くの の配列が与えられた場合、緯度/経度が一致する を 1 つの新しい配列Fooに抽出する必要があります。Foo

forループを使用した反復やNSPredicateを使用したソリューションなど、機能しているいくつかのソリューションを実装しましたが、これらの方法はどちらも配列を介した複数の反復を伴います。この配列には数十万のレコードが含まれる可能性があるため、1 回のパスで目的の結果を達成できるものを探しています。

編集:私がすでに取ったアプローチを説明し、問題をよりよく説明するために、いくつかの疑似コードを追加します...

NSMutableArray * matchingLocations = [[NSMutableArray alloc] initWithCapacity:0];

for (Foo * checkingFoo in fooArray) {

    NSMutableArray * checkingArray = [NSArray arrayWithArray:fooArray];
    [checkingArray removeObject:checkingFoo];        

    for (Foo * foo  in checkingArray) {

        // I have a method coded for comparing two coordinates
        if (checkingFoo.coordinate == foo.coordinate) { 

            [matchingLocations addObject:checkingFoo];                

        }

    }

}
4

3 に答える 3

0

同じ配列の for ループとして 2 つの高速列挙を実行しています。これは正しくありません。座標を比較したい場合は、別の配列の for ループを実行します。また、同じ for ループのみを使用している場合は、可変配列に直接追加することもできます。

于 2013-10-14T10:47:25.067 に答える
0

配列のオブジェクトを比較したい場合は、NSArray の代わりに NSSet を使用することをお勧めします。

使い方は非常に簡単で、 NSMutableSet を使用してそのようなケースを解決したので、以下のリンクが必要です。

NSSet チュートリアル

于 2013-10-14T10:52:26.920 に答える