2011-07-24 25 views
8

Từ những gì tôi đã đọc, các từ trong từ điển là duy nhất.Các khóa trong NSDictionary có thể được sao chép?

xem xét mã này:

NSMutableDictionary *mydic = [NSMutableDictionary dictionary]; 

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

Tại sao tôi có thể chạy mà không cần bất kỳ lỗi này? Tôi nên làm gì để tránh các khóa trùng lặp?

Trả lời

23

Phím có duy nhất. Gọi số -setObject:forKey: bằng khóa hiện tại ghi đè giá trị cũ - số đặt giá trị, chứ không phải thêm giá trị. Bạn có thể kiểm tra xem:

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

Nếu bạn không muốn các mặt hàng hiện có để được ghi đè, kiểm tra nếu nó tồn tại với -objectForKey::

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

nhờ kenny, nhưng tôi không biết nếu bạn có những gì tôi có nghĩa là chính xác hay không, ở đây tôi nói một lần nữa. hãy tưởng tượng tôi có danh sách các URL mà tôi muốn lưu, nhưng tôi không muốn lưu một liên kết hai lần! vì vậy tôi sẽ sử dụng một bảng băm đó là NSDictionary trong mục tiêu c, trong ví dụ mà tôi đã đề cập ở trên của nó là tiết kiệm cùng một phím (trùng lặp) trong một từ điển, tại sao là như vậy? –

+0

@saleh: Ý của bạn là gì? Các khóa và giá trị là gì? – kennytm

+0

không cần giá trị, chỉ muốn điền vào các lĩnh vực phím với đầu vào duy nhất. –

Các vấn đề liên quan