Ios NSArray中的NSDictionary变异
有没有什么快速的方法可以改变NSArray字典?我有一个很大的NSArray,我想更新NSDictionary中某个特定键的值。是否有任何快速的方法可以改变内部字典,以便我可以更新它们。假设您的原始数组包含不可变的字典,那么一种方法是使用所有原始字典的可变副本创建一个新数组Ios NSArray中的NSDictionary变异,ios,objective-c,cocoa-touch,nsarray,nsdictionary,Ios,Objective C,Cocoa Touch,Nsarray,Nsdictionary,有没有什么快速的方法可以改变NSArray字典?我有一个很大的NSArray,我想更新NSDictionary中某个特定键的值。是否有任何快速的方法可以改变内部字典,以便我可以更新它们。假设您的原始数组包含不可变的字典,那么一种方法是使用所有原始字典的可变副本创建一个新数组 NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:oldArray.count]; for (NSDictionary *dict in oldArra
NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:oldArray.count];
for (NSDictionary *dict in oldArray) {
[newArray addObject:[dict mutableCopy]];
}
现在对
newArray
执行所有工作假设原始数组包含不可变的字典,那么一种方法是使用所有原始字典的可变副本创建一个新数组
NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:oldArray.count];
for (NSDictionary *dict in oldArray) {
[newArray addObject:[dict mutableCopy]];
}
现在完成所有有关
newArray
的工作,我想您希望同时修改所有词典。如果要修改词典,则词典必须是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;
}
我猜你想同时修改所有的词典。如果要修改词典,则词典必须是
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;
}
下面的代码将更改特定字典并返回您的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]);
日志
{
key = objectChanged;
}
下面的代码将更改特定字典并返回您的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]);
日志
{
key = objectChanged;
}
可能是for-in循环?字典是可变的还是不可变的?是否要更新一个特定数组元素,或使用该键更新所有字典?可能是for in循环?字典是否可变?是否要更新一个特定数组元素,或使用该键更新所有字典?谢谢。我认为这是唯一的选择。我希望有一些直接的方法可以做到这一点。请注意,如果原始结构来自JSON,那么NSJSONSerialization有一个选项,可以为您提供可变数组和索引。(否则我会尝试为NSArray和NSDictionary创建
deepMutableCopy
categories。)谢谢。我认为这是唯一的选择。我希望有一些直接的方法可以做到这一点。请注意,如果原始结构来自JSON,那么NSJSONSerialization有一个选项,可以为您提供可变数组和索引。(否则,我会尝试为NSArray和NSDictionary创建deepMutableCopy
类别。)