Question

Comment convertir un hachage < T > à un tableau dans .NET?

Était-ce utile?

La solution

Utilisez le HashSet < T > .CopyTo méthode. Cette méthode copie les éléments du HashSet < T > dans un tableau.

Donc, avec un HashSet < Chaîne > appelé stringSet , vous feriez quelque chose comme ceci:

String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);

Autres conseils

Si vous voulez dire System.Collections.Generic.HashSet, c'est un peu difficile car cette classe n'existait pas avant le framework 3.5.

Si vous voulez dire que vous êtes sur la version 3.5, utilisez simplement ToArray puisque HashSet implémente IEnumerable, par exemple.

using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();

Si vous avez votre propre classe HashSet, il est difficile de le dire.

Je suppose

function T[] ToArray<T>(ICollection<T> collection)
{
    T[] result = new T[collection.Count];
    int i = 0;
    foreach(T val in collection)
    {
        result[i++] = val;
    }
}

comme pour toute implémentation ICollection < T > .

En fait, vous devez référencer System.Core pour utiliser la classe HashSet < T > que vous pourriez aussi bien utiliser:

T[] myArray = System.Linq.Enumerable.ToArray(hashSet);

Vous pouvez maintenant le faire encore plus simplement, avec le constructeur List < T > (les listes sont des tableaux modernes :). E. g., Dans PowerShell:

$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top