2015-05-09 1 views
0

Я динамически заполняю NSMutableDictionary с идентичными ключами. Однако это заменяет исходное значение ключа. Я требую, чтобы он был добавлен и не заменил существующий ключ. Например, мне нужна структура, какДобавить в NSMutableDictionary без замены похожих ключей

{ 
     @"Key" : @"Value1", 
     @"Key" : @"Value2", 
     @"Key" : @"Value3" 
    } 

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

В настоящее время у меня есть следующие заменяющий исходное значение

NSMutableDictionary *ripDictionary = [[NSMutableDictionary alloc] init]; 

    for(NSString *ripId in recievedRips){ 

     //SOME OTHER CODE 

     ripDictionary[@"rip"] = keysAndAttributes; 

     [data addObject:ripDictionary]; 
    } 
+1

Это просто не так, как работают словари. У вас не может быть того, что вы требуете. Я сомневаюсь, что вам это действительно нужно. Объясните подробнее, что должна представлять структура данных и как вы собираетесь ее использовать. (Например, если словарь мог делать то, что вы хотите, как бы вы получили доступ к значениям, поскольку ключи неоднозначны? Это просто не имеет смысла.) –

ответ

3

От NSDictionary Reference

Ключ-значение пары в словаре называется записью. Каждая запись состоит из одного объекта, который представляет ключ и второй объект, который является значением этого ключа. В словаре есть уникальные ключи. То есть никакие два ключа в одном словаре не равны (как определено isEqual :).

Может быть, вы могли бы изменить код, чтобы принять словарь как:

{ 
     @"Key" : [ 
       @"Value1", 
       @"Value2", 
       @"Value3" 
      ] 
} 
+0

Чтобы подробнее ответить на вопрос @ Frankie, вам, кажется, нужен словарь массивов, поэтому в словах ObjC есть «NSDictionary», сделанный из ключей «NSString» и «NSMutableArray». Исправьте свой код, чтобы он соответствовал этому шаблону, и вы должны получить то, что хотите. – Romain

1

Вы можете иметь только один уникальный ключ за словарем, так что если вы хотите использовать несколько значений, связанных с ним, то вы бы добавить эти значения в массив связанные с ключом.

if([aDictionary objectForKey:@"key"] != nil){ 
    aDictionary[@"key"] = @[aDictionary[@"key"], bDictionary[@"key"]]; 
}else{ 
    aDictionary[@"key"] = bDictionary[@"key"]; 
    //OR make all aDictionary values array by default with a single value 
    //but you get the point 
}