Вопрос

Как мне конвертировать HashSet < T > к массиву в .NET?

Это было полезно?

Решение

Используйте HashSet < T > .CopyTo метод. Этот метод копирует элементы из HashSet < T > в массив.

Поэтому, получив HashSet < String > с именем stringSet , вы сделаете что-то вроде этого:

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

Другие советы

Если вы имеете в виду System.Collections.Generic.HashSet, это довольно сложно, поскольку этот класс не существует до фреймворка 3.5.

Если вы имеете в виду, что вы используете 3.5, просто используйте ToArray, поскольку HashSet реализует IEnumerable, например.

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

Если у вас есть свой собственный класс HashSet, трудно сказать.

Я думаю,

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

как и для любой реализации ICollection < T > .

На самом деле, поскольку вы должны ссылаться на System.Core , чтобы использовать класс HashSet < T > , вы также можете использовать его:

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

Теперь вы можете сделать это еще проще с помощью конструктора List < T > (списки - это современные массивы :). Например, в PowerShell:

$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top