2010-09-23 22 views
15

Tôi biết bạn có thể liệt kê các khóa hoặc giá trị của NSMutableDictionary sử dụng NSEnumerator. Có thể làm cả hai với nhau? Tôi đang tìm một cái gì đó tương tự như các điều tra viên PHP foreach như:Liệt kê NSDictionary bằng các phím và đối tượng, kiểu PHP

foreach ($dictionary as $key => $value); 
+0

http://stackoverflow.com/questions/3701126/get-the-array-index-in-for-statement-in-objective-c/3701165#3701165 – RolandasR

Trả lời

56

Có lẽ nhìn vào phương pháp NSDictionary của:

enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop)) 

Nếu bạn không quen thuộc với các khối trong C/Objective-C, điều này là một hướng dẫn tốt: http://thirdcog.eu/pwcblocks/

+2

Tôi thấy điều này và thích những gì tôi thấy, nhưng các khối dường như chỉ có 10.6 & 4.0 iOS. Vẫn hỗ trợ 3.1.3 trong ứng dụng của tôi. – typeoneerror

34
NSDictionary* d = [NSDictionary dictionaryWithObjectsAndKeys:@"obj1",@"key1", 
                  @"obj2",@"key2", 
                  @"obj3",@"key3", 
                  @"obj4",@"key4",nil]; 

for (id key in [d allKeys]) { 
    NSLog(@"%@ - %@",key,[d objectForKey:key]); 
} 

Đầu ra:

keytest[7880:a0f] key3 - obj3 
keytest[7880:a0f] key1 - obj1 
keytest[7880:a0f] key4 - obj4 
keytest[7880:a0f] key2 - obj2 
+6

Một điều: Sử dụng liệt kê nhanh trên một 'NSDictionary' đã lặp lại các khóa, do đó,' [d allKeys] 'là không cần thiết. – Wevah

+0

ah, rất hay để biết – ACBurk

+0

Tôi nghĩ rằng các khối đẹp hơn, nhưng đây là những gì tôi đã làm vì tôi không thể sử dụng các khối trong ứng dụng iphone của mình. – typeoneerror

4

Bây giờ dễ dàng hơn nhiều:

for (NSString * key in dict) 
{ 
    id/* or your type */ value = dict[key]; 
    ... 
} 
+1

Câu trả lời đơn giản và tuyệt vời nhất. –

+0

Phản hồi này không trả lời câu hỏi. OP đã tìm cách để liệt kê các khóa và giá trị với nhau. Cách tiếp cận này chỉ liệt kê các khóa và yêu cầu tìm kiếm thêm để có được giá trị được liên kết với mỗi khóa. –

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