سؤال

لقد صممت فئة لا يوجد شيء سوى كائن يخزن عددًا كبيرًا من خصائص جزء من البيانات. لقد قمت بتنفيذ icomparable في الفصل. يتم إنشاء كائنات من الفصل وتخزينها في قائمة.

هناك مستوى إضافي من التعقيد في أن بعض الحقول من الكائن تحدد الحقول التي أحملها (هناك تسلسل هرمي) ، وهكذا يكون التسلسل الهرمي:

  • 1) الاسم (محدد في مثيل)
  • 2) المنتج (محدد في مثيله)
  • 3) NetGroup (المحددة بعد الثبات ، بعد إنشاء القائمة الأولي ، أتكرر مرة أخرى ، وأداء حساب ، وتعيين المجموعة.)
  • 4) التاريخ (محدد في مثيله)

هناك العديد من الأعلام (حقول Bool) التي تحدد ما إذا كان يتم استخدام اثنين من ما سبق في التسلسل الهرمي للفرز.

  • 5) السماح PuctgroupingInd (محدد في مثيل)
  • 6) lefteDateGroupingInd (محدد في مثيل)

الأداء من النوع على قائمة صغيرة نسبيا (ن = 1000) ضعيف ، وعموما حوالي 500 مللي ثانية.

لست متأكدًا مما إذا كنت قد قمت بتطبيق مقارنتي بشكل صحيح. طريقتي تبدو هكذا:

    public int CompareTo(Exposure rfpe)
            {
                if (Name.CompareTo(rfpe.Name) != 0)
                    return Name.CompareTo(rfpe.Name);
                else
                {
                    if (AllowProductGroupingInd == false)
                    {
                        if (ProductId.CompareTo(rfpe.ProductId) != 0)
                            return ProductId.CompareTo(rfpe.ProductId);
                    }

                    if (NetGroup.CompareTo(rfpe.NetGroup) != 0)
                        return NetGroup.CompareTo(rfpe.NetGroup );
                    else if (AllowDateGroupingInd == false)
                    {
                        if (Date.CompareTo(rfpe.Date) != 0)
                            return Date.CompareTo(rfpe.Date);
                        else
                            return 0;
                    }

                    return 0;
                }

            }

أنا أستخدم C# 3.0 لذلك لا يمكنني استخدام LINQ. هل هذا تطبيق معقول لما أريد إنجازه؟ هل يوجد حل أكثر أناقة؟ يبدو لي أنني قد أستخدم الكثير من الشرطية ، لكنني غير متأكد من كيفية التغلب على ذلك.

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

المحلول

يبدو أنك تتصل بمضاعفة كل من الشركة التابعة CompareTo الأساليب ، أول واحد هو على الأرجح هو الأداء الجاني الرئيسي.

int nameCompare = Name.CompareTo(rfpe.Name);

if (nameCompare != 0)
   return nameCompare;
else
   ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top