如何重命名NSArray中的NSDictionary中的键

时间:2017-01-05 16:26:25

标签: objective-c nsarray nsdictionary

我在key/value内的NSDictionary内有一对NSArray

foo=bar

我需要在NSDictionary内的每个NSArray重命名foo,以便它们全部显示为:

jongel=bar

我已阅读一些文档,了解如何使用allKeys方法提取密钥,但我找不到有关在NSDictionary中重命名密钥的任何内容。

5 个答案:

答案 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 可变字典来执行此操作。

如果知道oldKeynewKey,则有三个步骤:

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];