سؤال

لدي عدد من الكائنات، كل شيء من نفس الفصل (colornum) كل كائن لديه 2 الأعضاء variabels (m_color و m_number)

مثال:

ColorNum1(Red,25)
ColorNum2(Blue,5)
ColorNum3(Red,11)
ColorNum4(White,25)

الكائنات الأربعة هي في colornumlist

List<ColorNum> ColorNumList = new List<ColorNum>();

الآن أريد أن أطلب القائمة بحيث الكائنات مع MCOLOR = "الأحمر" في الأعلى. أنا لا أهتم بترتيب الكائنات المتبقية.

ماذا يجب أن تبدو طريقة المسند الخاص بي؟

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

المحلول

باستخدام LinQ:

var sortedRedAtTop = 
    from col in ColorNumList 
    order by col.Color == Red ? 1 : 2
    select col;

أو طريقة فرز القائمة:

ColorNumList.Sort( (x,y) => 
    (x.Color == Red ? 1 : 2)-(y.Color == Red ? 1 : 2) );

نصائح أخرى

ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));

يرى http://msdn.microsoft.com/en-us/library/system.arriay.sort(vs.71).aspx.

C #] فرز الفراغ الثابت العام (صفيف، صفيف، int، int، Icomparer)؛

تحتاج إلى تنفيذ وظيفة تقارير كائنين وإرجاع قيمة تشير إلى ما إذا كان أحد أقل من، يساوي أو أكبر من الآخر.

http://msdn.microsoft.com/en-us/library/system.collections.icomparer.compare(vs.71).aspx.

تحتاج إلى كتابة فئة تنحدر واجهة Icomparer.

أنا لم أستخدم C #، ولكن هنا هو مكافئ VB:

فئة colorcompare تنفذ icomparer

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
        Dim xc As ColorNum = TryCast(x, ColorNum)
        Dim yc As ColorNum = TryCast(y, ColorNum)
        If x.color = Red Then
            Return 1
        ElseIf y.color = Red Then
            Return -1
        Else
            Return 0
        End If
    End Function
End Class
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top