46

如何将 HashSet<T> 转换为 .NET 中的数组?

4

4 回答 4

60

使用HashSet<T>.CopyTo方法。此方法将项目从 复制HashSet<T>到数组。

所以给你一个HashSet<String>电话stringSet你会做这样的事情:

String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
于 2009-10-21T21:08:02.593 回答
29

如果您的意思是 System.Collections.Generic.HashSet,这有点困难,因为该类在框架 3.5 之前不存在。

如果您的意思是您使用的是 3.5,则只需使用 ToArray,因为 HashSet 实现了 IEnumerable,例如

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

如果你有自己的 HashSet 类,那就很难说了。

于 2009-10-21T21:21:49.463 回答
0

我猜

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);
于 2009-10-21T21:11:33.673 回答
0

现在您可以使用List<T>构造函数更简单地完成它(列表是现代数组:)。例如,在 PowerShell 中:

$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)
于 2019-02-11T15:18:30.107 回答