2010-11-11 23 views
41

¿Cómo convierto una matriz en un conjunto de hash?Convierta una matriz a HashSet <T> en .NET

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

Necesito convertir esta lista en hashset.

+0

¿Qué tipo de lista/matriz es esta? ¿Qué contiene? – Bernard

+0

Llamarlo BlockList es * muy * engañoso. Sugeriría BlockNames. –

+0

posible duplicado de [Cómo convertir resultados de linq a HashSet o HashedSet] (http://stackoverflow.com/questions/3471899/how-to-convert-linq-results-to-hashset-or-hashedset) – nawfal

Respuesta

76

No se especifica qué tipo BlockedList es, así que asumiré que es algo que se deriva de IList (si quería decir String donde escribió BlockList entonces sería una matriz de cadena que se deriva de IList).

HashSet tiene un constructor que toma un IEnumerable, por lo que basta con pasar la lista en este constructor, como se deriva de IListIEnumerable.

var set = new HashSet(BlockedList); 
+3

Llamando 'Split 'en este tipo de misterio, con un parámetro de matriz de caracteres y' StringSplitOptions' indica que BlockedList es una cadena. – Jamiec

+0

tanto como odio hacer suposiciones, mirando el método '.Split' y' StringSplitOptions', tendría que asumir la matriz 'String'. – IAbstract

12

Supongo que BlockList es una cadena (de ahí la llamada a Split) que devuelve una matriz de cadenas.

sólo tiene que pasar la matriz (que implementa IEnumerable) a la constructor of the HashSet:

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

Aquí es un método de extensión que va a generar un HashSet desde cualquier IEnumerable:

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

de usarlo con su ejemplo anterior:

var hashSet = BlockedList.ToHashSet(); 
2

Missed new keyword on extensio n ejemplo ....

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

Para dar un paso más, la siguiente de una sola línea muestra cómo se puede convertir un literal gama cadena a un HashSet, de modo que usted no tiene que definir una variable intermedia SomethingList.

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