문제

나는 같은 클래스 (colornum)에서 모두 객체가 여러 개 있습니다. 각 객체에는 2 개의 멤버 variabels (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"가있는 개체가 맨 위에 있도록 목록을 주문하고 싶습니다. 나는 나머지 물체의 순서를 신경 쓰지 않습니다.

내 술어 방법은 어떻게 생겼습니까?

도움이 되었습니까?

해결책

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.array.sort(vs.71).aspx

C#] 공개 정적 무효 정렬 (배열, 배열, 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