0

私は2つ持っていNSMutableArrayます。1 つの配列はデータベースからのレコードで構成され、もう 1 つの配列は Web サービスからのレコードで構成されます。

のような一意のキーを使用して、データベース配列の各レコードを Web サービス配列の各レコードと比較したいと考えていますbarcodeID。また、barcodeIDキーが同じ場合は、配列から項目を削除したいと思います。データベースのレコードを更新しているようなものです。Web サービスから同じレコードを取得した場合、それらを挿入したくありません。

これの論理を破ることができないので、助けてください。

4

3 に答える 3

5

Product.barcodeIDがオブジェクトを一意に識別する場合、そのメンバーを使用して-[Product hash]andを実装できます-[Product isEqual:]

Productその後、 sで簡単に使用できますNSSet。セットを結合および削除するためのいくつかのメソッドが含まれていますNSSetNSMutableSet

于 2012-08-21T19:51:27.290 に答える
0

これは、強引な方法の一種のアイデアです。上で述べたように、これは他の方法と比較して信じられないほど遅いです。

- (void)myUpdateFunction
{
    NSMutableArray *baseDatabaseArray;
    NSMutableArray *baseWebServiceArray;

    for (int i = 0; i < baseWebServiceArray.count; i++) {
        id value = [[baseWebServiceArray objectAtIndex:i] valueForKey:@"barcodeID"];
        NSArray *array = [baseDatabaseArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"barcodeID = %@", value]];
        if (array.count > 0)
        {
            id obj = [array objectAtIndex:0];
            [baseDatabaseArray removeObject:obj];
        }
        [baseDatabaseArray addObject:[baseWebServiceArray objectAtIndex:i]];
    }
}

私はマジカルレコードを使用していて、それが大好きです。ただし、これにはコアデータを使用する必要があります。これが私のアップデートコードがMagicalRecordでどのように見えるかです。

- (void)updateDatabase
{
    Class class = NSClassFromString(self.managedObjectClassName);

    if ([class MR_countOfEntities] > 0) {
        for (NSArray *array in self.totalBatches) {
            [class MR_updateFromArray:array];
        }
    } else {
        for (NSArray *array in self.totalBatches) {
            [class MR_importFromArray:array];
        }
    }

    [self.totalBatches removeAllObjects];
}

Core Dataの感触について質問がある場合、またはアルゴリズムをウォークスルーする必要がある場合は、遠慮なく質問してください。

于 2012-08-21T20:11:01.167 に答える
0

このような比較を行う強引な方法は、ある配列のすべてのレコードが別の配列のすべてのレコードでチェックされることです。見つかったら、停止してオブジェクトを破棄します。見つからない場合は、配列に追加します。もちろん、これには非常に高い時間の複雑さがあり、最悪のシナリオは O(n^2) です。データベースと Web サービス内の特定のデータ構造を使用することで、これを短縮できます。たぶん、ソートされた順序で、または何らかのアルゴリズムを介してそれらを保存します。

この質問をする前に、自分で調査を行う必要があります。コードを最適化する方法を見つけるオプションを残します。

幸運を!

于 2012-08-21T19:51:03.723 に答える