开发者

Convert an array to a HashSet<T> in .NET

开发者 https://www.devze.com 2023-01-24 09:05 出处:网络
How 开发者_StackOverflow社区do I convert an array to a hash set ? string[]BlockedList = BlockList.Split(new char[] { \';\' },

How 开发者_StackOverflow社区do I convert an array to a hash set ?

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

I need to convert this list to a hashset.


You do not specify what type BlockedList is, so I will assume it is something that derives from IList (if meant to say String where you wrote BlockList then it would be a string array which derives from IList).

HashSet has a constructor that takes an IEnumerable, so you need merely pass the list into this constructor, as IList derives from IEnumerable.

var set = new HashSet(BlockedList);


I'm assuming BlockList is a string (hence the call to Split) which returns a string array.

Just pass the array (which implements IEnumerable) to the constructor of the HashSet:

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


Here is an extension method that will generate a HashSet from any IEnumerable:

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

To use it with your example above:

var hashSet = BlockedList.ToHashSet();


Update 2017 - For .Net Framework 4.7.1+ and .Net Core 2.0+

There is now a built-in ToHashSet method:

var hashSet = BlockedList.ToHashSet();


Missed new keyword on extension example....

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


To take one step further, the following one-liner demonstrates how you can convert a literal string array to a HashSet, so that you do NOT have to define an intermediate variable SomethingList.

var directions = new HashSet<string>(new [] {"east", "west", "north", "south"});


Convert an array to a HashSet<T> in .NET

List<int> a1 = new List<int> { 1, 2 };
List<int> b1 = new List<int> { 2, 3 };
List<int> a2 = new List<int> { 1, 2, 3 };
List<int> b2 = new List<int> { 1, 2, 3 };
List<int> a3 = new List<int> { 2, 3 };
List<int> b3 = new List<int> { 1, 2, 3 };

List<int> a4 = new List<int> { 1, 2, 3 };
List<int> b4 = new List<int> { 2, 3 };
List<int> a5 = new List<int> { 1, 2 };
List<int> b5 = new List<int> { };
List<int> a6 = new List<int> { };
List<int> b6 = new List<int> { 1, 2 };
List<int> a7 = new List<int> { };
List<int> b7 = new List<int> { };

HashSet<int> first = new HashSet<int>(a1);
HashSet<int> second = new HashSet<int>(b1);
first.Overlaps(second);

first = new HashSet<int>(a2);
second = new HashSet<int>(b2);
first.Overlaps(second);

first = new HashSet<int>(a3);
second = new HashSet<int>(b3);
first.Overlaps(second);

first = new HashSet<int>(a4);
second = new HashSet<int>(b4);
first.Overlaps(second);

first = new HashSet<int>(a5);
second = new HashSet<int>(b5);
first.Overlaps(second);

first = new HashSet<int>(a6);
second = new HashSet<int>(b6);
first.Overlaps(second);

first = new HashSet<int>(a7);
second = new HashSet<int>(b7);
first.SetEquals(second);
0

精彩评论

暂无评论...
验证码 换一张
取 消