2017-01-05 11 views
0

У меня есть key/value пару в качестве NSDictionary внутри NSArray какКак переименовать ключ в NSDictionary внутри NSArray

foo=bar 

Мне нужно переименовать Foo в каждом NSDictionary внутри NSArray так, что все они , как:

jongel=bar 

Я прочитал некоторые документы, как извлечь ключи с помощью метода allKeys, но я не могу найти ничего о переименовании ключ в NSDictionary.

+1

Невозможно переименовать ключ, вы должны удалить объект из словаря, и чем добавить его с новым ключом. – NSDmitry

+0

Ключ словаря должен реализовывать 'Hashable', потому что хэш ключа является неотъемлемой частью работы словаря. Если вы измените ключ, вы измените «hashValue» ключа. Поэтому вы не можете просто переименовать его на месте, вы должны удалить его, а затем вставить новую пару ключ/значение с новым ключом и старым значением. –

ответ

0

Прежде всего вам нужно NS Mutable Словарь для этого.

Если 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; 
0

Вы не можете переименовывать ключ. Но вы можете установить новый ключ.

Если у вас есть изменяемый словарь, то вы можете сделать ...

dictionary[@"jongel"] = dictionary[@"foo"]; 
dictionary[@"foo"] = nil; 
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; 
+0

«неизменяемый массив, который тоже должен быть изменчивым», что это? Почему ты бы так поступил? – iCaramba

+0

@iCaramba, у нас есть массив, содержащий словарь, который необходимо заменить. Это означает, что мы должны мутировать этот массив. – danh

0

Вы не можете ничего изменить в NSDictionary, так как он предназначен только для чтения.

Вы вносите изменения только в NSMutableDictionary с новыми именами ключей.

Вы можете получить изменяемый словарь неизменяемого, вызвав на нем mutableCopy.

использованием

- (void)exchangeKey:(NSString *)foo withKey:(NSString *)jongel inMutableDictionary:(NSMutableDictionary *)aDict 
{ 
//do your code 
} 
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]; 

 Смежные вопросы

  • Нет связанных вопросов^_^