比较代表触发器结果在相同的键上

时间:2009-10-15 13:32:00

标签: c# sorting delegates

当某些排序项目相同时,有没有办法从比较中获得一致的结果?我只需要编写自己的排序程序吗?

    public class Sorter
{
    public void SortIt()
    {
        var myData = new List<SortData>(3);
        myData.Add(new SortData { SortBy = 1, Data = "D1"});
        myData.Add(new SortData { SortBy = 1, Data = "D2" });
        myData.Add(new SortData { SortBy = 2, Data = "D3" });

        myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy)));
        ShowResults(myData);
        myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy)));
        ShowResults(myData);
        myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy)));
        ShowResults(myData);
    }

    private void ShowResults(IEnumerable<SortData> myData)
    {
        foreach (var data in myData)
        {
            Console.WriteLine(data.SortBy + " " + data.Data);
        }
        Console.WriteLine("\n");
    }
}

public class SortData
{
    public int SortBy { get; set; }
    public string Data { get; set; }
}
enter code here

现在注意结果:

1 D2
1 D1
2 D3

1 D1
1 D2
2 D3

1 D2
1 D1
2 D3

我并不关心前两项是如何排序的,只要它是一致的而不是!它一直在翻转。

1 个答案:

答案 0 :(得分:2)

基本上是的:http://msdn.microsoft.com/en-us/library/w56d4y5z.aspx

  

此方法使用Array .. ::。Sort,其中   使用QuickSort算法。 :此   实现执行不稳定   分类;也就是说,如果有两个元素   平等,他们的订单可能不是   保存。相比之下,稳定   sort保留元素的顺序   这是平等的。

如果您想要一个稳定的排序,请查看其他地方或自己动手。