C# - كيفية تنفيذ مقارنات متعددة لفئة قابلة للعلاج؟

StackOverflow https://stackoverflow.com/questions/2480111

سؤال

لدي فئة تنفذ icomparable.

public class MyClass : IComparable<MyClass>
{
    public int CompareTo(MyClass c)
    {
        return this.whatever.CompareTo(c.whatever);
    }

    etc..
}

بعد ذلك ، يمكنني استدعاء طريقة الفرز لقائمة عامة من صفي

List<MyClass> c = new List<MyClass>();
//Add stuff, etc.

c.Sort();

وفرز القائمة وفقًا لمقارنتي.

كيف يمكنني تحديد المزيد من المقارنات لفرز مجموعتي طرقًا مختلفة وفقًا للخصائص الأخرى لـ MyClass للسماح للمستخدمين بفرز مجموعتي بعدة طرق مختلفة؟

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

المحلول

لإعداد النوع في صفك:

public static Comparison<MyClass> OtherComparison = delegate(MyClass object1, MyClass object2)
{
    return object1.Whatever.CompareTo(object2.Whatever);
};

ثم للفرز باستخدام المقارنة الجديدة:

List<MyClass> myClassList = new List<MyClass>();
myClassList.Sort(MyClass.OtherComparison);

باستثناء أنك لن ترغب في فرز قائمة فارغة :)

نصائح أخرى

You can call Sort with a specific comparer as the argument. المرجعي: MSDN

تتمثل خطوة واحدة في هذا الاتجاه في استخدام التحميل الزائد للفرز الذي يتيح لك تحديد ملف IComparer<T> (ليس IComparable<T>, ، رغم ذلك).

إذا كان لديك بالفعل الكثير من IComparable<T> التطبيقات ، يجب أن يكون من التافهة كتابة تنفيذ للأغراض العامة IComparer<T> وهذا يقارن اثنين IComparable<T> حالات. في الواقع ، أنا مندهش بعض الشيء مثل هذا الفصل غير موجود بالفعل في BCL ، لكنني لم أتمكن من العثور على واحدة.

Comparer<T>.Default يقترب ، ولكن ليس تماما.

إذا كان لديك طرق متعددة لفرز قائمة كائناتك ، فمن الواضح أنه يتعين عليك تحديد خيار الاختيار. هذا ما يتجاوزه الآخر من نوعه. إلقاء نظرة على icomparer والمقارنة.

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