在NSArray中改变NSDictionary

时间:2014-01-31 19:44:44

标签: ios objective-c cocoa-touch nsarray nsdictionary

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

3 个答案:

答案 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;
}