2013-02-01 14 views
5

Hãy xem xét một bộ hàng nghìn đối tượng NSString, trong bộ nhớ.Tìm kiếm NSString một cách hiệu quả trong một tập hợp

Cách hiệu quả nhất để tìm kiếm NSString cụ thể trong bộ này là gì? Việc sử dụng NSDictionary có đủ không? Hoặc là nó đảm bảo rằng tìm kiếm của NSSet là O (1) (không thể tìm thấy bất kỳ tài liệu nào nói như vậy)?

Và chiến lược tương tự sẽ áp dụng cho các đối tượng NSData?

+1

Chính xác bạn muốn làm gì? Nếu bạn chỉ muốn xác định xem một chuỗi (hoặc dữ liệu) có trong tập hợp không, đó chính xác là những gì 'NSSet' là cho. Nếu bạn muốn truy xuất một số đối tượng khác được liên kết với chuỗi (hoặc dữ liệu), hãy sử dụng 'NSDictionary'. Chúng là các cấu trúc dữ liệu khác nhau cho các nhu cầu khác nhau. –

+0

Đếm nhanh có phải là một lựa chọn tốt không? – Exploring

+0

@KurtRevis Tôi chỉ muốn biết liệu yếu tố này có thuộc về tập hợp hay không. Tuy nhiên, tôi không thể tìm thấy bất kỳ xác nhận nào rằng thứ tự tìm kiếm của NSSet là O (1) trong mọi trường hợp. – hpique

Trả lời

4

This page cho thấy lưu ý sau đây về bộ:

Lưu ý: Nếu các đối tượng trong tập hợp có một hàm băm tốt, truy cập vào một phần tử, thiết lập một phần tử, và loại bỏ một yếu tố tất cả mất thời gian liên tục. Với hàm băm kém (một hàm gây ra va chạm băm thường xuyên), các hoạt động này sẽ mất thời gian tuyến tính. Các lớp như NSString là một phần của Foundation có hàm băm tốt.

Vì vậy, đối với NSString bạn có thể mong đợi thời gian liên tục dựa trên những điều trên.

0

NSSet sử dụng bảng băm trong quá trình triển khai và kiểm tra sự bình đẳng giữa tất cả các phần tử trong va chạm băm. Vì vậy, hiệu suất được gắn trực tiếp với hiệu quả băm của các phần tử của nó.