0

私はmoveという名前のクラスを持っています。それはint型のvalという名前のフィールドを持っていますそして私はmlistという名前のmovesのリストを持っています

私はこれを書いた

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

最初、私のリストには2つのオブジェクトがあり、リストを並べ替えると、両方とも.val=0になります。これら2つのオブジェクトの場所が変更されます。しかし、私はこれが起こりたくありません。私に何ができる?

4

3 に答える 3

2

Sortは、不安定なソートであるクイックソートを実行します。

安定した並べ替えが必要な場合は、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 に答える