Как изменить массив словарей? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть NSArray с несколькими NSDictionaries. Я хочу создать новый NSArray с тем же номером NSDictionaries, но мне нужны только некоторые ключи в словаре, а не все.

Пример:

В массиве есть 2 словаря. Каждый словарь имеет ключ name, age, address, email, phone.

Я хочу новый массив, который также имеет 2 словаря, но только ключи name and address.

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

Я бы сделал что-то вроде:

NSMutableArray *replacementArray = [NSMutableArray array];

[existingArray enumerateObjectsUsingBlock:
    ^(NSDictionary *dictionary, NSUInteger idx, BOOL *stop)
    {
         NSDictionary *newDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[dictionary objectForKey:@"name"], @"name", [dictionary objectForKey:@"address"], @"address", nil];
         [replacementArray addObject:newDictionary];
    }
];
0 голосов
/ 17 февраля 2012

Попробуйте это

 for(i=0;i<[firstArray count];i++){

 NSArray *objectArray=[NSArray arrayWithObjects:[[firstArray objectAtIndex:i]objectForKey:@"name"],[[firstArray objectAtIndex:i]objectForKey:@"address"]];

 NSArray *keyArray=[NSArray arrayWithObjects:@"name",@"address"];
 NSDictionary *myDictionary=[NSDictionary dictionaryWithObjects:objectArray forKeys:keyArray];

 [secondArray addObject:myDictionary];
}
0 голосов
/ 17 февраля 2012

Попробуйте следующее (совместимо с iOS 2 +):

NSMutableArray *newArray = [NSMutableArray array];
for (NSDictionary *origDict in origArray) { // Replace origArray with your array's name
    [newArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[origDict objectForKey@"name"], @"name", [origDict objectForKey@"address"], @"address", nil]];
}
NSArray *newImmutableArray = [newArray copy] // If you want to ensure your array is not mutable
// ...
[newImmutableArray release]; // To balance -copy above
...