2011-07-24 17 views
8

Okuduklarımdan, sözlüklerdeki anahtarlar benzersizdir.NSDictionary'deki anahtarlar çoğaltılabilir mi?

NSMutableDictionary *mydic = [NSMutableDictionary dictionary]; 

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

Neden hiçbir hata olmadan bu çalıştırabilirsiniz:

bu kodu düşünün

? Yinelenen anahtarlardan kaçınmak için ne yapmalıyım?

cevap

23

Evet tuşları benzersizdir. numaralı bir anahtarla -setObject:forKey: numaralı çağrı, değerini eski değere geçersiz kılar - değerlerini ayarlar, değerleri ekler. o -objectForKey: ile var olup olmadıklarını,

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

öğeleri mevcut istemiyorsanız geçersiz kılınabilir için: Bunu kontrol edebilirsiniz

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

sayesinde kenny, ama ne var bilmiyorum neyi Tam olarak değil, demek istedim, tekrar söylüyorum. Kaydetmek istediğim URL'lerin bir listesini aldığımı düşünün, ancak bir bağlantıyı iki kez kaydetmek istemiyorum! Bu yüzden NSDictionary nesnesel c olan bir hash tablosunu kullanacağım, yukarıda bahsettiğim örnekte, bir sözlükte aynı tuşları (çoğaltmayı) kaydetmekteyim, neden bu? –

+0

@saleh: Ne demek istiyorsun? Anahtarlar ve değerler nelerdir? – kennytm

+0

, değerlere ihtiyaç duymaz, sadece anahtar alanlarını benzersiz girişlerle doldurmak istersiniz. –

İlgili konular