我有许多对象,都来自同一个类(ColorNum)每个对象都有2个成员变量(m_Color和m_Number)
示例:
ColorNum1(Red,25)
ColorNum2(Blue,5)
ColorNum3(Red,11)
ColorNum4(White,25)
4个对象位于ColorNumList
中List<ColorNum> ColorNumList = new List<ColorNum>();
现在我想订购列表,以便mColor =“Red”的对象位于顶部。 我不关心其余物体的顺序。
我的谓词方法应该是什么样的?
答案 0 :(得分:11)
使用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) );
答案 1 :(得分:0)
ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));
答案 2 :(得分:0)
请参阅http://msdn.microsoft.com/en-us/library/system.array.sort(VS.71).aspx
[C#] public static void Sort(Array,Array,int,int,IComparer);
您需要实现一个比较两个对象的函数,并返回一个值,指示一个是否小于,等于或大于另一个。
http://msdn.microsoft.com/en-us/library/system.collections.icomparer.compare(VS.71).aspx
您需要编写一个实现IComparer接口的类。
我没有使用过C#,但这里是VB等价物:
Class 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