2009-07-12 6 views
28

Có cách nào hiệu quả hơn để thêm các đối tượng vào một Từ điển NSMutable hơn là lặp lại đơn giản không?Từ điển NSMutable thêm các đối tượng

Ví dụ:

// Create the dictionary 

NSMutableDictionary *myMutableDictionary = [NSMutableDictionary dictionary];  

// Add the entries 

[myMutableDictionary setObject:@"Stack Overflow" forKey:@"http://stackoverflow.com"]; 
[myMutableDictionary setObject:@"SlashDotOrg" forKey:@"http://www.slashdot.org"]; 
[myMutableDictionary setObject:@"Oracle" forKey:@"http://www.oracle.com"]; 

Chỉ cần tò mò, tôi chắc chắn rằng đây là cách nó đã được thực hiện.

Trả lời

15

Nếu bạn có tất cả các đối tượng và các phím trước bạn có thể khởi tạo nó bằng cách sử NSDictionary của:

dictionaryWithObjects:forKeys: 

Tất nhiên điều này sẽ cung cấp cho bạn từ điển bất biến không thể thay đổi. Nó phụ thuộc vào cách sử dụng của bạn mà một trong những bạn cần, bạn có thể nhận được một bản sao có thể thay đổi từ NSDictionary nhưng có vẻ như dễ dàng hơn chỉ để sử dụng mã ban đầu của bạn trong trường hợp đó:

NSDictionary * dic = [NSDictionary dictionaryWith....]; 
NSMutableDictionary * md = [dic mutableCopy]; 
... use md ... 
[md release]; 
+0

Cảm ơn ý kiến ​​thứ hai của bạn. Tôi chỉ muốn chắc chắn rằng tôi đã không bỏ lỡ bất cứ điều gì và để xem nếu có một cái gì đó một chút hiệu quả hơn/thanh lịch. – djt9000

+0

Tôi cũng tìm kiếm một tùy chọn để khởi tạo NSMutableDictionary với các đối tượng và các phím như bạn có thể làm cho NSDictionary nhưng tôi không thể tìm thấy bất cứ điều gì ... – stefanB

20
NSDictionary *entry = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithDouble:acceleration.x], @"x", 
    [NSNumber numberWithDouble:acceleration.y], @"y", 
    [NSNumber numberWithDouble:acceleration.z], @"z", 
    [NSDate date], @"date", 
    nil]; 
+0

đã giúp tôi ty :) – grilix

8

Cho phép tôi thêm một số thông tin cho mọi người đang bắt đầu.

Có thể tạo ra một NSDictionary với một cú pháp thân thiện hơn với objective-c literals:

NSDictionary *dict = @{ 
    key1 : object1, 
    key2 : object2, 
    key3 : object3 }; 
+0

bạn nên kết thúc danh sách với một nil? – vvMINOvv

+2

@vvMINOvv Không cần :). Điều tương tự với NSArrays literals :) –

0
NSMutableDictionary *example = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@5,@"burgers",@3, @"milkShakes",nil]; 

Đối tượng đến trước các phím.