Это больше из заменить чем переименованы. Вот решение, которое решает проблему Изменчивость и возвращает словарь, как в оригинале ...
- (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;
Невозможно переименовать ключ, вы должны удалить объект из словаря, и чем добавить его с новым ключом. – NSDmitry
Ключ словаря должен реализовывать 'Hashable', потому что хэш ключа является неотъемлемой частью работы словаря. Если вы измените ключ, вы измените «hashValue» ключа. Поэтому вы не можете просто переименовать его на месте, вы должны удалить его, а затем вставить новую пару ключ/значение с новым ключом и старым значением. –