0

我有一个名为 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,这两个对象的位置发生了变化。但我不希望这种情况发生。我能做些什么?

4

3 回答 3

2

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

如果你想要一个稳定的排序,你可以使用OrderByLinQ 提供的方法

在您的示例中使用OrderBy将假设这mList是一个List<>

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

如果您希望反向排序,则调用该方法OrderByDescending

于 2012-09-13T08:31:38.567 回答
1

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

于 2012-09-13T08:32:18.577 回答
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;

        }
    }
于 2012-09-13T08:41:49.957 回答