Как мне преобразовать HashSet <T> к массиву в .NET?
Преобразование HashSet <T> в массив в .NET.
Ответ 1
Используйте метод HashSet<T>.CopyTo
. Этот метод копирует элементы из HashSet<T>
в массив.
Таким образом, для a HashSet<String>
, называемого stringSet
, вы сделали бы что-то вроде этого:
String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
Ответ 2
Если вы имеете в виду System.Collections.Generic.HashSet, это сложно, поскольку этот класс не существует до фреймворка 3.5.
Если вы имеете в виду, что вы на 3.5, просто используйте ToArray, поскольку HashSet реализует IEnumerable, например.
using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();
Если у вас есть собственный класс HashSet, трудно сказать.
Ответ 3
Думаю,
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);