Wie konvertiere ich ein HashSet <T> zu einem Array in .NET?Konvertieren Sie ein HashSet <T> zu einem Array in .NET
Antwort
Verwenden Sie die HashSet<T>.CopyTo
Methode. Diese Methode kopiert die Elemente von HashSet<T>
in ein Array.
So ein gerufener HashSet<String>
gegeben stringSet
Sie würde so etwas wie tun:
String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
HashSet.ToArray() ist einfacher –
Gibt es ein ToArray? Ich kann es nicht finden – Konstantin
@Konstantin HashSet
Ich denke,
function T[] ToArray<T>(ICollection<T> collection)
{
T[] result = new T[collection.Count];
int i = 0;
foreach(T val in collection)
{
result[i++] = val;
}
}
wie für jede ICollection<T>
Umsetzung.
Eigentlich in der Tat, wie Sie System.Core
verweisen muss die HashSet<T>
Klasse zu verwenden, wie gut Sie können es verwenden:
T[] myArray = System.Linq.Enumerable.ToArray(hashSet);
Warum hart arbeiten, wenn Sie CopyTo haben? – Vitaliy
Da es generischer ist (es gilt für jede ICollection
Wenn Sie System.Collections.Generic.HashSet meine, es ist ziemlich schwer, da diese Klasse tut existiert nicht vor Rahmen 3.5.
Wenn Sie meinen, dass Sie auf 3.5 sind, verwenden Sie einfach ToArray, da HashSet IEnumerable implementiert, z.
using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();
Wenn Sie Ihre eigene HashSet-Klasse haben, ist es schwer zu sagen.
Siehe die Antwort auf diese Frage: http://stackoverflow.com/questions/687034/using-hashset-in-c-2-0-compatible-with-3-5 –
Zitat aus dieser Antwort: "Sie können HashSet verwenden
'HashSet' ist nur in **. Net 3.5 ** verfügbar. Daher können Sie die 'ToArray()' Linq-Erweiterungsmethode verwenden. –
adrianbanks
@adrianbanks: Danke. Wie auch immer, ich habe die Frage so bearbeitet, dass sie den Antworten besser entspricht. –