在C#中排序不保存地点

时间:2012-09-13 08:27:20

标签: c# sorting

我有一个名为move的类 它有一个名为val的类型为int的字段 我有一个名为mlist

的动作列表

我写了这个

mlist.Sort((b, a) =>
    {
       if (a.val > b.val)
           return 1;
       else if (a.val == b.val)
           return 0;
       else
           return -1;
    }
    );

首先我的列表有两个对象,它们都有.val = 0 当我对列表进行排序时,这两个对象的位置会发生变化。但我不希望这种情况发生。我该怎么办?

3 个答案:

答案 0 :(得分:2)

Sort执行快速排序,这是一种不稳定的排序。

如果您想要稳定排序,可以使用LinQ提供的OrderBy方法

在您的示例中使用OrderBy假设mListList<>

mList = mList.OrderBy(a => a.val).ToList();

如果您需要反向排序,则该方法称为OrderByDescending

答案 1 :(得分:1)

正如@Hans Kesting所说排序不稳定。 在此处阅读有关稳定排序的http://www.csharp411.com/c-stable-sort/

答案 2 :(得分:1)

你应该使用orderBy:

   MyComparer comparer=new MyComparer();
   mlist=  mlist.OrderBy(p => p, comparer).ToList();



  public class Comparer : IComparer<YourObject>
    {


        public int Compare(YourObject a, YourObject b)
        {

            if (a.val > b.val)
                return 1;
            else if (a.val == b.val)
                return 0;
            else
                return -1;

        }
    }