有没有快速改变NSArray NSArray的方法?我有一个很大的NSArray,我想更新NSDictionary中特定键的值。是否有任何快速改变内部词典的方法,以便我可以更新它们。
答案 0 :(得分:2)
我想你想同时修改所有词典。如果你想修改它们,你的词典必须是NSMutableDictionary
个实例。
假设它们是,您可以使用setValue:forKey:
同时修改所有这些内容。例如:
static NSMutableDictionary *dictionary() {
return [@{ @"first": @"Oscar", @"second": @"Meyer" } mutableCopy];
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array = @[ dictionary(), dictionary(), dictionary() ];
[array setValue:@"Humphrey" forKey:@"first"];
NSLog(@"%@", array);
}
return 0;
}
答案 1 :(得分:1)
假设您的原始数组包含不可变字典,那么一种方法是创建一个包含所有原始字典的可变副本的新数组。
NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:oldArray.count];
for (NSDictionary *dict in oldArray) {
[newArray addObject:[dict mutableCopy]];
}
现在在newArray
上完成所有工作。
答案 2 :(得分:1)
以下代码将更改特定字典并返回您的NSArray实例
对于以下示例,arrayOfDictionaries
是包含所有对象的原始数组。
NSDictionary *dic1 = @{@"key":@"object1"};
NSDictionary *dic2 = @{@"key":@"object2"};
NSDictionary *dic3 = @{@"key":@"object3"};
NSArray *arrayOfDictionaries=@[dic1,dic2,dic3];
NSMutableArray *mutableArray =[NSMutableArray arrayWithArray:arrayOfDictionaries];
//suppose you want to modify dic2
NSInteger index=[arrayOfDictionaries indexOfObject:dic2];
//index will be 1
NSMutableDictionary *mutableDic =[NSMutableDictionary dictionaryWithDictionary:dic2];
[mutableDic setObject:@"objectChanged" forKey:@"key"];
NSDictionary *changedDic = [NSDictionary dictionaryWithDictionary:mutableDic];
[mutableArray replaceObjectAtIndex:index withObject:changedDic];
arrayOfDictionaries = [NSArray arrayWithArray:mutableArray];
NSLog(@"%@",arrayOfDictionaries[1]);
LOGS
{
key = objectChanged;
}