2008-12-09 34 views
10

Có một thùng chứa chung nào đang triển khai hành vi 'đã đặt' trong .NET không?.NET Generic Set?

Tôi biết tôi chỉ có thể sử dụng Dictionary<T, Object> (và có thể thêm nulls làm giá trị), vì khóa của nó hoạt động như một bộ, nhưng tôi tò mò nếu có điều gì đó sẵn sàng thực hiện.

+0

Thời gian qua tôi đã kiểm tra, trong Java, HashSet được thực hiện với HashMap <=> điển (với null trong giá trị) nhưng trong .NET, HashSet không sử dụng bất kỳ bộ sưu tập. Đó là triển khai "cốt lõi". –

Trả lời

19

HashSet<T> trong .NET 3.5

+1

BEHOLD! http://msdn.microsoft.com/en-us/library/bb359438.aspx – longda

3

Tôi sử dụng Iesi.Collections. không gian tên đi kèm với NHibernate (tài liệu here) - có thể đáng xem xét nếu bạn đang ở. NET < 3.5

1

Được giới thiệu trong .NET 3.5: HashSet<T> (xem bên dưới).

Được giới thiệu vào .NET 4.0: ISet<T>:

Cung cấp giao diện cơ sở cho sự trừu tượng của bộ. Giao diện này cung cấp các phương pháp triển khai bộ, là bộ sưu tập có các yếu tố độc đáo và các hoạt động cụ thể.

Giao diện có hai triển khai trong .NET 4+ BCL:

  • HashSet<T>:

    ... cung cấp thiết lập hoạt động hiệu suất cao. Một tập hợp là một bộ sưu tập mà không chứa các yếu tố trùng lặp, và có yếu tố này là không theo thứ tự đặc biệt

  • SortedSet<T>:

    Đại diện cho một bộ sưu tập của các đối tượng được duy trì theo thứ tự sắp xếp. Một SortedSet (Of T) duy trì một thứ tự sắp xếp như các yếu tố được chèn và xóa mà không ảnh hưởng đến hiệu suất. Các phần tử trùng lặp không được cho phép là .

FWIW: Ngoài ra còn có một internalclass TreeSet<T>: SortedSet<T> dưới namespace System.Collections.Generic.
Mục đích duy nhất của nó có vẻ là cách sử dụng trong việc triển khai SortedDictionary<TKey, TValue>.