2011-07-24 18 views
8

Z tego, co przeczytałem, klucze w słownikach są unikalne.Klucze w NSDictionary można duplikować?

Rozważmy następujący kod:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary]; 

[mydic setObject:@"value1" forKey:@"key1"]; 
[mydic setObject:@"value1" forKey:@"key1"]; 
[mydic setObject:@"value1" forKey:@"key1"]; 

Dlaczego nie mogę uruchomić tego bez żadnego błędu? Co powinienem zrobić, aby uniknąć duplikowania kluczy?

Odpowiedz

23

Klucze tak są niepowtarzalne. Wywołanie -setObject:forKey: z istniejącym kluczem przesłania starej wartości - to ustawia wartości, a nie dodaje wartości. Można sprawdzić, że:

[mydict setObject:@"1" forKey:@"key1"]; 
[mydict setObject:@"2" forKey:@"key1"]; 
NSLog(@"%@", mydict); 

Jeśli nie chcesz istniejące elementy mają być nadpisane, sprawdzić, czy istnieje z -objectForKey::

@implementation NSMutableDictionary (AddItem) 
-(void)addObjectWithoutReplacing:(id)obj forKey:(id)key { 
    if ([self objectForKey:key] == nil) 
     [self setObject:obj forKey:key]; 
} 
@end 
+0

dzięki Kenny, ale nie wiem, czy masz to, czego Chodziło mi o to dokładnie czy nie, znowu mówię. wyobraź sobie, że mam listę adresów URL, które chcę zapisać, ale nie chcę dwa razy zapisywać linku! więc zamierzam użyć tabeli mieszania, która jest NSDictionary w obiektywnym c, w przykładzie, który wyżej wspomniałem, jest zapisywanie tych samych kluczy (duplikatów) w słowniku, dlaczego tak jest? –

+0

@saleh: Co masz na myśli? Jakie są klucze i wartości? – kennytm

+0

nie potrzebujesz wartości, po prostu chcesz wypełnić pola klawiszy unikalnymi danymi wejściowymi. –