Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSArray中的NSDictionary变异_Ios_Objective C_Cocoa Touch_Nsarray_Nsdictionary - Fatal编程技术网

Ios 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

有没有什么快速的方法可以改变NSArray字典?我有一个很大的NSArray,我想更新NSDictionary中某个特定键的值。是否有任何快速的方法可以改变内部字典,以便我可以更新它们。

假设您的原始数组包含不可变的字典,那么一种方法是使用所有原始字典的可变副本创建一个新数组

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
类别。)