سؤال

التكرار المحتمل:
قائمة الانتظار ذات الأولوية في .Net

هذا السؤال مشابه لكن أريد أن أعرف بالضبط:

هل هناك أي فئة/هيكل/...في .Net لقائمة الانتظار ذات الأولوية؟تماما كما هو الحال في المحكمة الخاصة بلبنان التي لديها priority_queue لهذا.ويقبل أ مقارنة وظيفة لدعم أنواع مخصصة.

أفضل شيء وجدته في .Net هو القائمة المصنفة<المفتاح، القيمة> الذي يفرز قيمه حسب المفتاح.لذا فإن أحد الحلول هو تنفيذ العرف يقارن واجهة لفئة المفتاح.لكن لا يمكنني فصل العناصر الخاصة بي إلى أزواج المفتاح/القيمة.لدي عناصر ذرية يجب وضعها في قائمة الانتظار وفقًا لقيمها باستخدام وظيفة مخصصة.

إذن، هل هناك أي فئة تجميع في .Net تقبل وظيفة مقارنة لفرز عناصرها؟

هل هناك أي طريقة لاشتقاق فئة .Net (ربما HashSet) الذي يدعم هذه الميزة؟


ملحوظة:

  • أعلم أن العديد من الجهات الخارجية نفذت دروسًا جيدة حقًا لهذا الغرض.ربما هو مثال جيد مجموعات الطاقة.ولكني أريد حلاً سريعًا وبسيطًا باستخدام الفئات الموجودة في .Net
  • أنا أستخدم .Net Framework 3.5 وأحب لغة C# ;)
هل كانت مفيدة؟

المحلول

يمكنك استخدام أ SortedDictionary الطبقة، وهي عامة.

يمكنك تحديد كائن مقارنة بـ البناء, ، والتي يجب أن تتعامل مع مقارنة الأولوية للكائنات الخاصة بك:

public class DataComparer : IComparer<Data>
{
    public Int32 Compare(Data a, Data b)
    {
        if (a == null && b == null)
            return 0;
        if (a == null)
            return -1;
        if (b == null)
            return +1;
        return a.Priority.CompareTo(b.Priority);
    }
}

SortedDictionary<Data, Data> priQueue = new SortedDictionary<Data, Data>(
    new DataComparer());

نصائح أخرى

يمكنك فقط تطبيق IComparable على صفك وإنشاء المقارن المحدد داخل فصلك، وبهذه الطريقة يمكنك فقط استخدام IList.Sort() ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top