0

私はしばらくの間これについて論理的に考えようとしてきました、そして通常私はそれを書き出すか、プログラミングに関係のない他のことをしながらそれについて考えることによってそれを解決することができます。しかし、私が試したすべてが機能していません。つまり、基本的に2つNSArraysあり、どちらも2つの異なるplistから入力されます。各配列はすべての辞書で満たされています。すべてが同じキーを持ち、すべてが同じ構造を持っていますが、一部の配列にはないキーに関連付けられた情報がある場合があります。基本的に、各アイテムをチェックインしてarray1、に存在するかどうかを確認し、に存在array2しない場合はarray2に追加する必要がありますarray1(またはarray3、反復中に配列を変更できない方法を確認します)。特定のキー""によって存在するかどうかを確認するために必要name_keyです。

つまり...要するに、私の最終結果は、NSArray(辞書からの)重複した名前のオブジェクトを持たずに、両方の配列からのすべてのオブジェクトを含む必要がありますname_key

以下は、機能しない実際のコードです。

以下のコード:originalWhiskiesListArray= array1 newWhiskiesListArray= array2 combinedWhiskiesListArray= array3(配列を反復処理している間は配列を変更できないため。

BOOL whiskyExists = YES;
    for (NSDictionary *newWhisky in newWhiskiesListArray) {

        for (NSDictionary *originalWhisky in originalWhiskiesListArray) {
            NSString * newWhiskyNameString = [[newWhisky objectForKey:NAME_KEY] lowercaseString];
            NSString * origWhiskyNameString = [[originalWhisky objectForKey:NAME_KEY] lowercaseString];

           //Compare lowercase strings and if they don't match then add them to the original plist array.
            if ([newWhiskyNameString isEqualToString:origWhiskyNameString]) {
                whiskyExists = YES;
                break;
            } else {
                whiskyExists = NO;
                break;
                //NSLog(@"Whisky names do not match. New Whisky: %@ Old Whisky: %@",[newWhisky objectForKey:NAME_KEY],[originalWhisky objectForKey:NAME_KEY]);
                //doesn't match so add it
                                }
        }
        if (whiskyExists == NO) {
            [combinedWhiskiesListArray addObject:newWhisky];
            NSLog(@"newWhisky added");
            whiskyExists = YES;
        }

    }
4

2 に答える 2

0

どちらのウイスキーの名前の文字列もnilにすることはできますか?もしそうなら、これはisEqualToStringの比較を破ります。なぜなら、NOを返すnilにいつでもメッセージを送ることができるからです。

また、休憩は間違っていると思います。一致した場合にのみ、内側のループを終了する必要があります。そうでない場合は、内側のループが終了するまで続行する必要があります。

于 2013-01-14T06:33:12.020 に答える
0

私があなたを正しく理解していれば、各辞書のすべての値を NSMutableSet に追加するだけで、アイテムがセットに既に存在する場合、アイテムは追加されません。次に、NSSet メソッド allObjects を使用して、セットを配列に戻すことができます。

于 2013-01-14T04:57:09.367 に答える