2010-03-10 26 views
12

Tôi có một danh sách các đối tượng và tôi cần phải tìm một đối tượng càng nhanh càng tốt (theo tên thuộc tính của nó). Tôi nên sử dụng cấu trúc dữ liệu nào? Tôi biết tôi có thể sử dụng một từ điển, nhưng sẽ không bao giờ có nhiều hơn 10 mục trong danh sách, và nếu tôi nhớ chính xác từ điển được thực hiện như một mảng nếu bộ sưu tập chứa 10 mục hoặc ít hơn.Tôi có nên sử dụng Từ điển cho các bộ sưu tập có 10 mục hoặc ít hơn hoặc có lựa chọn thay thế tốt hơn không?

Cảm ơn.

+6

Đối với 10 mục hoặc ít hơn, có lẽ không quan trọng bạn sử dụng loại cấu trúc nào. –

+0

Việc lựa chọn cấu trúc dữ liệu phụ thuộc vào nhiều yếu tố khác ngoài kích thước. Các phần tử sẽ được chèn vào và xóa bao lâu một lần? Làm thế nào quan trọng là tốc độ trong việc tìm kiếm một đối tượng? Điều này sẽ được sử dụng trong một vòng lặp chặt chẽ? Làm thế nào quan trọng là tốc độ chèn và xóa? 10 món hàng có giới hạn cứng, hay một sân chơi bóng chày? –

+1

Bạn đã lược tả đơn đăng ký của mình và xác định đây là một nút cổ chai hiệu suất? Tôi sẽ rất ngạc nhiên nếu như vậy. – TrueWill

Trả lời

10

MSDN khuyến cáo các ListDictionary cho các bộ sưu tập với 10 mặt hàng trở xuống:

Đây là một thực hiện đơn giản của IDictionary sử dụng một danh sách đơn lẻ liên kết. Nó nhỏ hơn và nhanh hơn một Hashtable nếu số lượng các phần tử là 10 hoặc ít hơn. Điều này không nên được sử dụng nếu hiệu suất là quan trọng đối với số lượng lớn các yếu tố.

+0

+1 Điều này nghe có vẻ hoàn hảo cho mục đích này! –

+9

Đề xuất đó có thể lỗi thời vì ListDictionary không phải là chung chung. Các tài liệu đã nói rằng kể từ đầu. –

+0

Cảm ơn bạn Anna, đó có vẻ là một câu trả lời hoàn hảo cho câu hỏi của tôi. –

4

Bạn có thể muốn xem xét System.Collections.Specialized.ListDictionary nếu bạn chắc chắn sẽ có ít hơn mười mục.

Cũng xem xét System.Collections.Specialized.HybridDictionary chuyển đổi hành vi (với chi phí nhỏ) nên kích thước tăng trên ngưỡng, tiện dụng nếu giả định của bạn sai.

0

Tại sao không chỉ sử dụng Hashtable? Nó nằm trong không gian tên System.Collections.

+2

Bởi vì cả hai lớp Từ điển <> và Hashtable đều triển khai các hashtables và có phí trên phải tính toán mã băm cho mỗi mục mà chỉ trả tiền cho chính nó khi bộ sưu tập không nhỏ. –

2

Vì bạn muốn tìm kiếm nhanh nhất có thể bằng thuộc tính, bạn nên sử dụng Dictionary<Key, Value>. Kích thước không làm bạn đau nếu bạn muốn tra cứu nhanh. Nó không phải là một Dictionary<Key, Value> chỉ 10 mặt hàng hoặc ít hơn là chiếm một tấn bộ nhớ. Dictionary<Key, Value> có một hàm tạo có một int để thiết lập dung lượng.

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