我在key/value
内的NSDictionary
内有一对NSArray
对
foo=bar
我需要在NSDictionary
内的每个NSArray
重命名foo,以便它们全部显示为:
jongel=bar
我已阅读一些文档,了解如何使用allKeys
方法提取密钥,但我找不到有关在NSDictionary
中重命名密钥的任何内容。
答案 0 :(得分:3)
它更像是替换而不是重命名。这是一个处理可变性问题并返回类似原始字典的解决方案......
- (NSDictionary *)changeKey:(NSString *)key toKey:(NSString *)newKey inDictionary:(NSDictionary *)d {
NSMutableDictionary *result = [d mutableCopy];
result[newKey] = d[key];
[result removeObjectForKey:key];
return result;
}
// elsewhere, call it...
NSDictionary *d = @{ /* your original immutable dictionary */ };
d = [self changeKey:@"foo" toKey:@"jongel" inDictionary:d];
如果你经常使用它,这是字典扩展的候选者。
如果它在一个不可变数组中,那么必须是可变的 ......
NSArray *myArray = ...
NSMutableArray *myMutableArray = [myArray mutableCopy];
NSDictionary *d = myArray[someIndex];
myMutableArray[someIndex] = [self changeKey:@"foo" toKey:@"jongel" inDictionary:d];
myArray = myMutableArray;
答案 1 :(得分:0)
首先,您需要 NS 可变字典来执行此操作。
如果知道oldKey
和newKey
,则有三个步骤:
NSString *oldKey = @"foo";
NSString *newKey = @"jongel";
// get the value
id value = dictionary[oldKey];
// remove the old key
[dictionary removeObjectForKey:oldKey];
// set the new key
dictionary[newKey] = value;
答案 2 :(得分:0)
您无法重命名密钥。但是你可以设置一个新密钥。
如果你有一个可变的字典,那么你可以做...
dictionary[@"jongel"] = dictionary[@"foo"];
dictionary[@"foo"] = nil;
答案 3 :(得分:0)
您无法更改NSDictionary
中的任何内容,因为它是只读的。
您只能使用新的密钥名称在NSMutableDictionary
中进行更改。
您可以通过调用mutableCopy
来获取不可变的可变字典。
使用
- (void)exchangeKey:(NSString *)foo withKey:(NSString *)jongel inMutableDictionary:(NSMutableDictionary *)aDict
{
//do your code
}
答案 4 :(得分:0)
无法修改NSDictionary。 你可以试试这种方式
NSMutableArray *tempArray = [[NSMutableArray alloc]init];
for (int j=0; j<yourArray.count; j++) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithDictionary:[yourArray objectAtIndex:j]];
[dict setObject: [dict objectForKey: @"oldKey"] forKey: @"newKey"];
[dict removeObjectForKey: @"oldKey"];
[tempArray addObject:dict];
}
yourArray = [[NSArray alloc]initWithArray:(NSArray *)tempArray];