7

次のデータを提供するNSArrayがあります。

01/14/2013 13:28:06.559 IUser Reader [71164: c07] (
         {
         "id_acompanhante" = "";
         "id_evento" = 34;
         "user_id" = 1;
         "inserido_por" = "Himself";
         name = iUser;
         status = done;
         type = User;
     }
         {
         "id_acompanhante" = 1;
         "id_evento" = 34;
         "user_id" = 1;
         "inserido_por" = iUser;
         name = "Mayara Roca";
         status = naofeito;
         type = companion;
     }
)

このデータをNSMutableArrayで再生し、各アイテム内に別のフィールドを追加するにはどうすればよいですか。例:

  {
     "id_acompanhante" = "";
     "id_evento" = 34;
     "user_id" = 1;
     "inserido_por" = "Himself";
     name = IUser;
     status = done;
     type = User;
     tag = 2;
 }

フィールド「TAG」をもう1つ追加しました。

どうすればよいですか?

4

6 に答える 6

8
NSMutableArray *mutableArray = [NSMutableArray array];

for (NSDictionary *dictionary in yourArray) {
    NSMutableDictionary *mutDictionary = [dictionary mutableCopy];

    [mutDictionary setObject:[NSNumber numberWithInt:2] forKey:@"tag"];

    [mutableArray addObject:mutDictionary];
}

これはあなたが求めたことを行う方法です。配列を変更可能にすると、その中の辞書の内容を変更できなくなります。各辞書を取り出して可変にし、配列に格納する必要があります。

于 2013-01-14T15:51:29.260 に答える
7

簡単

NSMutableArray *mArray = [NSMutableArray arrayWithArray:yourArray]
[mArray addObject:yourObject];
于 2013-01-14T15:37:13.177 に答える
1

配列でmutableCopyを呼び出すのと同じくらい簡単です。

NSArray * myArray = @[@"one", @"two", @"three"];
NSMutableArray * myMut = [myArray mutableCopy];
NSLog(@"My Mut = %@", myMut);

お役に立てば幸いです。

更新 これは、元の配列を反復処理し、アイテムを可変ディクショナリに変換して、新しいプロパティを挿入する例です。次に、元の配列をトスし、myMutバージョンを使用します。

NSArray * myArray = @[@{@"key1":@"value1"}, @{@"key2":@"value2"}];
NSMutableArray * myMut = [[NSMutableArray alloc] init];
for (NSDictionary * dict in myArray) {
    NSMutableDictionary * mutDict = [dict mutableCopy];
    [mutDict setObject:@"2" forKey:@"tag"]; // Add new properties
    [myMut addObject:mutDict];
}
于 2013-01-14T15:43:35.863 に答える
0

私が理解している限り、可変配列は必要ありませんが、配列内のNSDictionariesを可変に変換する必要があります。これは他の人からも答えられています。

しかし、オンラインですべての可変辞書にキーと値のペアを追加する方法を設定するための気の利いたトリックを示したいと思います。私はあなたと同じようにはるかに単純なデータを使用しているので、何が起こっているのかがわかりやすくなっています。

//just an example array of mutable Dictionary
NSMutableArray *array = [NSMutableArray array];
[array addObject:[NSMutableDictionary dictionaryWithObject:@"one" forKey:@(1)]];
[array addObject:[NSMutableDictionary dictionaryWithObject:@"two" forKey:@(2)]];
[array addObject:[NSMutableDictionary dictionaryWithObject:@"three" forKey:@(3)]];

// and here is the trick
[array setValue:@"10" forKey:@"tag"];

アレイに含まれるようになりました

(
{
    tag = 10;
    1 = one;
},
{
    tag = 10;
    2 = two;
},
{
    3 = three;
    tag = 10;
}
)

NSArrayドキュメントから

setValue:forKey:
指定された値とキーを使用して、配列の各アイテムに対してsetValue:forKey:を呼び出します。

- (void)setValue:(id)value forKey:(NSString *)key
于 2013-01-14T16:20:08.410 に答える
0

これを試して

NSMutableArray *aMutableArray = [NSMutableArray arrayWithArray:anArray];
于 2013-01-14T15:38:10.027 に答える
0
NSArray *theOldArray; // your old array
NSMutableArray *theMutableAry = [NSMutableArray array];
for (NSDictionary *dicItem in theOldArray)
{
    NSMutableDictionary *dicWithOneMoreField = [NSMutableDictionary dictionaryWithDictionary:dicItem];
    [dicWithOneMoreField setValue:@"your value for tag" forKey:@"tag"];
    [theMutableAry addObject:dicWithOneMoreField];
}

または他の方法を試してください

NSData* archivedData = [NSKeyedArchiver archivedDataWithRootObject:theOldArray];
NSMutableArray *mutableArray = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
for (NSDictionary *dicItem in mutableArray)
{
    [dicItem setValue:@"your value for tag" forKey:@"tag"];
}
于 2013-01-17T08:37:07.663 に答える