Bir HashSet <T> dosyasını .NET'deki bir diziye nasıl dönüştürebilirim?Bir HashSet <T> dosyasını bir dizide dönüştürme .NET
cevap
HashSet<T>.CopyTo
yöntemini kullanın. Bu yöntem, öğeleri HashSet<T>
'dan bir diziye kopyalar.
Yani verilen adında bir HashSet<String>
stringSet
böyle bir şey yapacağını:
String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
HashSet.ToArray() daha basit –
ToArray var mı? – Konstantin
@ Konstantin HashSet
herhangi ICollection<T>
uygulanması için olduğu gibi
function T[] ToArray<T>(ICollection<T> collection)
{
T[] result = new T[collection.Count];
int i = 0;
foreach(T val in collection)
{
result[i++] = val;
}
}
sanırım.
Aslında HashSet<T>
sınıfını kullanmak System.Core
başvurmalıdır olarak aslında siz de kullanabilecek: Eğer System.Collections.Generic.HashSet kastediyorsan
T[] myArray = System.Linq.Enumerable.ToArray(hashSet);
CopyTo'yu kullanırken neden çok çalışıyorsunuz? – Vitaliy
Daha genel olduğundan (herhangi bir ICollection
, bu tür sert o sınıf yapar beri var Çerçeve 3.5 öncesinde mevcut değil.
Eğer 3.5 üzerinde iseniz, HashSet IEnumerable uyguladığı için ToArray'ı kullanın, örn.
using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();
Kendi HashSet sınıfınız varsa, söylemek zor.
Bu sorunun yanıtına bakın: http://stackoverflow.com/questions/687034/using-hashset-in-c-2-0-compatible-with-3-5 –
Bu cevaptan alıntı: "HashSet'i kullanabilirsiniz Şimdi bir 2.0 uygulamada
'HashSet' yalnızca ** sürümünde kullanılabilir. Net 3.5 **. Bu şekilde, 'ToArray()' Linq uzantı yöntemini kullanabilirsiniz. –
adrianbanks
@adrianbanks: Teşekkürler. Her neyse, cevabı daha iyi cevaplamak için soruyu düzenledim. –