2010-11-11 32 views
41

Làm cách nào để chuyển đổi mảng thành tập hợp băm?Chuyển đổi mảng thành HashSet <T> trong .NET

string[] BlockedList = BlockList.Split(new char[] { ';' },  
StringSplitOptions.RemoveEmptyEntries); 

Tôi cần chuyển đổi danh sách này thành hashset.

+0

Loại danh sách/mảng nào? Nó chứa gì? – Bernard

+0

Gọi BlockList là * rất * gây hiểu lầm. Tôi muốn đề nghị BlockNames. –

+0

bản sao có thể có của [Cách chuyển đổi kết quả LINQ thành HashSet hoặc HashedSet] (http://stackoverflow.com/questions/3471899/how-to-convert-linq-results-to-hashset-or-hashedset) – nawfal

Trả lời

76

Bạn không chỉ định loại BlockedList là, vì vậy tôi sẽ cho rằng nó là cái gì đó xuất phát từ IList (nếu có nghĩa là để nói String nơi bạn đã viết BlockList sau đó nó sẽ là một mảng chuỗi mà xuất phát từ IList).

HashSet có hàm tạo mất IEnumerable, vì vậy bạn chỉ cần chuyển danh sách vào hàm tạo này, như IList có nguồn gốc từ IEnumerable.

var set = new HashSet(BlockedList); 
+3

Gọi 'Chia 'trên loại bí ẩn này, với tham số của mảng char và' StringSplitOptions' loại chỉ ra rằng BlockedList là một chuỗi. – Jamiec

+0

nhiều như tôi ghét việc đưa ra các giả định, nhìn vào phương thức '.Split' và' StringSplitOptions', tôi sẽ phải giả sử mảng 'String'. – IAbstract

12

Tôi giả định BlockList là một chuỗi (do đó cuộc gọi đến Split) trả về một mảng chuỗi.

Chỉ cần vượt qua mảng (mà thực hiện IEnumerable) đến constructor of the HashSet:

var hashSet = new HashSet<string>(BlockedList); 
7

Dưới đây là một phương pháp mở rộng mà sẽ tạo ra một HashSet từ bất kỳ IEnumerable:

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source) 
{ 
    return new HashSet<T>(source); 
} 

Để sử dụng nó với bạn ví dụ trên:

var hashSet = BlockedList.ToHashSet(); 
2

Từ khóa mới bị bỏ lỡ trên extensio n dụ ....

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source) 
    { 
     return new HashSet<T>(source); 
    } 
0

Chịu thêm một bước nữa, sau một lót cho thấy làm thế nào bạn có thể chuyển đổi một chữ mảng chuỗi đến một HashSet, do đó bạn không cần phải xác định một biến trung gian SomethingList.

var directions = new HashSet<string>(new [] {"east", "west", "north", "south"}); 
Các vấn đề liên quan