2010-03-06 24 views
44

Tôi đoán một cách khác để cụm từ này sẽ là "Có một lớp như List<> trong C#, nhưng tối ưu hóa để kiểm tra xem một giá trị cụ thể có mặt không?" Tôi chắc chắn cho một tập hợp nhỏ các giá trị List<>.Contains có lẽ sẽ ổn, nhưng nếu tôi có một bộ hàng ngàn hoặc hàng triệu giá trị và muốn tìm hiểu xem liệu một giá trị nhất định có trong đó không?Có một lớp học như Từ điển <> trong C#, nhưng chỉ với các khóa, không có giá trị?

Tôi đã triển khai loại điều này trong quá khứ bằng cách tạo một Dictionary<object, int> và đặt giá trị là 0 cho mỗi khóa, nhưng điều này thực sự rất khó khăn. Và bây giờ có Stack Overflow, nơi mà câu hỏi ngu ngốc của tôi có thể được chuyển thành giáo dục cho hàng ngàn (hàng chục, thậm chí). Vì vậy, ở đây nó được!

Tôi thậm chí không chắc chắn những gì một lớp học như vậy sẽ được gọi là, trừ có lẽ Set, vì vậy rõ ràng là tìm kiếm trên các chủ đề đã được ... thử thách :)

+0

bản sao có thể có của [Cấu trúc dữ liệu C# như từ điển nhưng không có giá trị] (http://stackoverflow.com/questions/1363773/c-sharp-data-structure-like-dictionary-but-without-a-value) – slolife

Trả lời

56

Hãy thử sử dụng các lớp HashSet<T>.

Chỉnh sửa: Tôi đã dành một thời gian dài làm chính xác những gì bạn đã làm cho đến khi tôi chỉ tình cờ gặp lớp học này trong khi đọc blog.

+0

+1, thừa nhận rằng tôi đã làm điều tương tự .. :) –

+2

Ngoài ra, trong .NET 4, lớp này hiện đang triển khai giao diện 'ISet ' mới, cùng với người anh em họ mới của nó 'SortedSet ', giống nhau , nhưng với ngữ nghĩa trật tự. –

+2

Quay lại những ngày đen tối của .NET 1.0 và 2.0, chúng tôi vừa tạo một lớp cơ bản hoạt động như HashSet nhưng sử dụng từ điển bên dưới. – jjxtra

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