c#中的排序列表替代

时间:2009-07-08 11:45:27

标签: c# .net list generic-collections

我有许多对象,都来自同一个类(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”的对象位于顶部。 我不关心其余物体的顺序。

我的谓词方法应该是什么样的?

3 个答案:

答案 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