2010-11-11 15 views
41

Come si converte un array in un set di hash?Convertire un array in un HashSet <T> in .NET

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

Ho bisogno di convertire questa lista in un hashset.

+0

Che tipo di elenco/matrice è questo? Cosa contiene? – Bernard

+0

Chiamarlo BlockList è * molto * fuorviante. Suggerirei BlockNames. –

+0

possibile duplicato di [Come convertire i risultati Linq in HashSet o HashedSet] (http://stackoverflow.com/questions/3471899/how-to-convert-linq-results-to-hashset-or-hashedset) – nawfal

risposta

76

Non si specifica che tipo BlockedList è, così non si assume è qualcosa che deriva da IList (se voluto dire String dove hai scritto BlockList allora sarebbe un array di stringhe che deriva dalla IList).

HashSet ha un costruttore che prende un IEnumerable, quindi è necessario solo passare la lista in questo costruttore, come IList deriva da IEnumerable.

var set = new HashSet(BlockedList); 
+3

Chiamare 'Split 'su questo tipo di mistero, con un parametro di char array e' StringSplitOptions' indica che BlockedList è una stringa. – Jamiec

+0

per quanto odio fare assunzioni, osservando il metodo '.Split' e' StringSplitOptions', dovrei assumere l'array 'String'. – IAbstract

12

Suppongo che BlockList sia una stringa (da qui la chiamata a Split) che restituisce un array di stringhe.

Basta passare la matrice (che implementa IEnumerable) al constructor of the HashSet:

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

Ecco un metodo di estensione che genererà un HashSet da qualsiasi IEnumerable:

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

di usarlo con il tuo esempio sopra:

var hashSet = BlockedList.ToHashSet(); 
2

Nuova parola chiave mancata su extensio n esempio ....

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

Per fare un ulteriore passo avanti, il seguente one-liner dimostra come è possibile convertire un valore letterale array di stringhead un HashSet, in modo che non è necessario definire una variabile intermedia SomethingList.

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