私はNSMutableArray
とNSArray
を持っています。どちらも、NSDictionarys
の要素で構成されています。次のように 両方のサンプル構造は次のとおりです。私が欲しいもの辞書のパラメータに基づいて辞書で構成される2つのNSArrayをマージする
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;
}
]
ある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;
}
.
.
.
.
]
唯一の方法のようになります。もっと良い方法はありますか?どんな助けでも大歓迎です。
EDIT:dasblinkenlights提案後
あなたobjectId
値が一意のキーとして使用することができますので、私はそれが道
-(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]];
}
#9035は、結合された配列で2回表示されます。それは意図的なのでしょうか? –
No .. !!私は質問を編集します。 – chatur