【问题标题】:Sort List alternative in c#c#中的排序列表替代方案
【发布时间】:2009-07-08 11:45:26
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net list generic-collections


    【解决方案1】:

    使用 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) );
    

    【讨论】:

      【解决方案2】:
      ColorNumList.Sort((x, y) => x.m_Color == Red ? 1 : (y.m_Color == Red ? -1 : 0));
      

      【讨论】:

        【解决方案3】:

        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 的等价物:

        类颜色比较 实现 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-04
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 2018-02-06
          • 2011-08-24
          相关资源
          最近更新 更多