Преобразовать HashSet <T>в массив в .NET - PullRequest
29 голосов
/ 22 октября 2009

Как преобразовать HashSet в массив в .NET?

Ответы [ 4 ]

45 голосов
/ 22 октября 2009

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

Итак, если HashSet<String> называется stringSet, вы бы сделали что-то вроде этого:

String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
20 голосов
/ 22 октября 2009

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

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

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

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

0 голосов
/ 11 февраля 2019

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

$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)
0 голосов
/ 22 октября 2009

Я думаю

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...