1

すべて同じクラス (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" のオブジェクトが一番上になるようにリストを並べ替えたいと思います。残りのオブジェクトの順序は気にしません。

私の述語メソッドはどのように見えるべきですか?

4

3 に答える 3

11

リンクの使用:

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) );
于 2009-07-08T11:47:58.960 に答える
0
ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));
于 2009-07-08T11:52:58.060 に答える
0

http://msdn.microsoft.com/en-us/library/system.array.sort(VS.71).aspxを参照してください。

[C#] public static void Sort(Array, Array, int, int, IComparer);

2 つのオブジェクトを比較し、一方が他方よりも小さいか、等しいか、または大きいかを示す値を返す関数を実装する必要があります。

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
于 2009-07-08T11:58:33.633 に答える