Come faccio a convertire un HashSet <T> ad un array in .NET?Convertire un HashSet <T> ad una matrice in .NET
risposta
Utilizzare il metodo HashSet<T>.CopyTo
. Questo metodo copia gli articoli da a un array.
Quindi, dato un HashSet<String>
chiamato stringSet
si farebbe qualcosa di simile:
String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
HashSet.ToArray() è più semplice –
Esiste un ToArray? Non riesco a trovarlo – Konstantin
@Konstantin HashSet
immagino
function T[] ToArray<T>(ICollection<T> collection)
{
T[] result = new T[collection.Count];
int i = 0;
foreach(T val in collection)
{
result[i++] = val;
}
}
come per qualsiasi ICollection<T>
implementazione.
In realtà, infatti, come è necessario fare riferimento System.Core
utilizzare la classe HashSet<T>
si potrebbe anche usarlo:
T[] myArray = System.Linq.Enumerable.ToArray(hashSet);
Perché lavorare sodo quando hai CopyTo? – Vitaliy
Poiché è più generico (si applica a qualsiasi ICollection) e CopyTo richiede l'allocazione manuale dell'array. –
Se vuoi dire System.Collections.Generic.HashSet, è un po 'difficile in quanto quella classe fa non esiste prima del framework 3.5.
Se si intende che si è su 3,5, è sufficiente utilizzare ToArray poiché HashSet implementa IEnumerable, ad es.
using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();
Se si dispone della propria classe HashSet, è difficile da dire.
Vedere la risposta a questa domanda: http://stackoverflow.com/questions/687034/using-hashset-in-c-2-0-compatible-with-3-5 –
Citazione da tale risposta: "È possibile utilizzare HashSet
'HashSet' è disponibile solo in **. Rete 3.5 **. Pertanto, è possibile utilizzare il metodo di estensione Linq 'ToArray()'. –
adrianbanks
@adrianbanks: Grazie. Ad ogni modo, ho modificato la domanda per abbinare meglio le risposte. –