2010-05-07 27 views

Trả lời

67

Nhìn vào lớp cha (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

Mà sẽ trả về một NSArray của tất cả các phím cho một giá trị gia tăng đối tượng nhất định. NHƯNG nó thực hiện điều này bằng cách gửi một thông báo isEqual đến từng đối tượng của từ điển để tập dữ liệu lớn của bạn có thể không hoạt động tốt nhất.

Có lẽ bạn cần phải giữ một số hình thức cấu trúc thêm cấu trúc chỉ mục (s) để cho phép bạn xác định vị trí các đối tượng trên một số giá trị quan trọng trong họ, liên kết với chìa khóa mà không cần so sánh đối tượng trực tiếp

6

Hãy xem tại địa chỉ:

- (NSArray *)allKeysForObject:(id)anObject 
19

Để trả lời bạn câu hỏi trong một cách cụ thể hơn, sử dụng sau đây để có được một chìa khóa cho một đối tượng cụ thể:

NSString *knownObject = @"the object"; 
NSArray *temp = [dict allKeysForObject:knownObject]; 
NSString *key = [temp objectAtIndex:0]; 

//"key" is now equal to the key of the object you were looking for 
6

Đó chắc chắn là có thể với phương pháp khối NSDictionary của

- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate; 

Bạn cần trả về các đối tượng đáp ứng một số điều kiện (vị từ).

Sử dụng nó như thế này:

NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { 

     BOOL found = (objectForWhichIWantTheKey == obj); 
     if (found) *stop = YES; 
     return found; 

    }]; 

Kiểm tra câu trả lời này để biết thêm chi tiết

How do I specify the block object/predicate required by NSDictionary's keysOfEntriesPassingTest?

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