فرز قائمة بديل في C #
-
11-09-2019 - |
سؤال
لدي عدد من الكائنات، كل شيء من نفس الفصل (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