【发布时间】:2010-12-08 21:17:03
【问题描述】:
如何在 .NET 中将 HashSet
【问题讨论】:
-
HashSet<T>仅在 .Net 3.5 中可用。因此,您可以使用ToArray()Linq 扩展方法。 -
@adrianbanks:谢谢。无论如何,我编辑了问题以更好地匹配答案。
如何在 .NET 中将 HashSet
【问题讨论】:
HashSet<T> 仅在 .Net 3.5 中可用。因此,您可以使用ToArray() Linq 扩展方法。
使用HashSet<T>.CopyTo 方法。此方法将 HashSet<T> 中的项目复制到数组中。
所以给定一个名为stringSet 的HashSet<String>,你会做这样的事情:
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)
【讨论】: