私はとを持っていNSMutableArray
ますNSArray
。NSDictionarys
どちらもそれ自体が要素で構成されています。両方のサンプル構造は次のとおりです。
NSMutableArray
[
{
objectId = 4274;
name = orange;
price = 45;
status = approved;
},
{
objectId = 9035;
name = apple;
price = 56;
status = approved;
},
{
objectId = 7336;
name = banana;
price = 48;
status = approved;
}
.
.
.
.
]
そしてNSAraayは
NSArray
[
{
objectId = 4274;
name = orange;
price = 106;
status = not_approved;
},
{
objectId = 5503;
name = apple;
price = 56;
status = approved;
}
]
私が欲しいのは、これら2つの配列をマージして、の要素がの要素と同じである場合にNSArray
、の要素がの要素を上書きするようにすることです。objectId
NSMutableArray
NSArray
NSMutableArray
したがって、この場合、最終的にマージされた配列は次のようになります。
MergedArray
[
{
objectId = 4274;
name = orange;
price = 106;
status = not_approved;
},
{
objectId = 9035;
name = apple;
price = 56;
status = approved;
},
{
objectId = 7336;
name = banana;
price = 48;
status = approved;
},
{
objectId = 5503;
name = apple;
price = 56;
status = approved;
}
.
.
.
.
]
私が知っている唯一の方法は、両方の配列を反復処理してマージすることです。より良い方法はありますか?どんな助けでも大歓迎です。
編集:
dasblinkenlightsの提案に従って、私は次のようにそれを行いました
-(NSMutableArray*)mergeTwoArray:(NSArray*)array1 :(NSArray*)array2
{
//array1 will overwrite on array2
NSSet* parentSet = [NSSet setWithArray:array2];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSDictionary *item in parentSet)
[dict setObject: item forKey: [item objectForKey:@"objectId"]];
NSLog(@"initial dictionary is %@",dict);
for (NSDictionary *item in array1)
[dict setObject: item forKey: [item objectForKey:@"objectId"]];
NSLog(@"final dictionary is %@ with all values %@", dict,[dict allValues]);
return [NSMutableArray arrayWithArray:[dict allValues]];
}