سؤال

وكيف يمكنني تحويل HashSet إلى صفيف في. NET؟

هل كانت مفيدة؟

المحلول

واستخدم HashSet<T>.CopyTo الأسلوب. هذا الأسلوب نسخ العناصر من HashSet<T> إلى صفيف.

وهكذا إعطاء HashSet<String> دعا stringSet كنت تفعل شيئا من هذا القبيل:

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> (قوائم وصالحة الحديثة :). E. ز، في بوويرشيل:.

$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top