私はしばらくの間これについて論理的に考えようとしてきました、そして通常私はそれを書き出すか、プログラミングに関係のない他のことをしながらそれについて考えることによってそれを解決することができます。しかし、私が試したすべてが機能していません。つまり、基本的に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;
}
}