Преобразовать HashSet < T > к массиву в .NET
Вопрос
Как мне конвертировать 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)