たとえば、List
に{1,2,3,4,5}
が含まれている場合は、Sort()
を呼び出しても何も変更されません。しかし、リストに{1,2,4,3,5}
が含まれている場合は、Sort()
を呼び出して注文を変更します。List.Sort()を呼び出した後に注文が変更されるかどうかを確認しますか?
Sort()
に何か変更があったかどうかを知る方法はありますか?このメソッドはvoid
を返します。
P.S. 実際、私はこの質問を投稿する前にこれをテストしました。考えられるのは、x
が現在y
の前の項目であるため、負の値を返す必要がある場合は、スワップが発生します。残念ながら、それは動作しませんでした...しかし、なぜですか?
class IntComp : IComparer<int>
{
public int Compare(int x, int y)
{
var result = x - y;
if (result < 0)
_IsChanged = true;
return result;
}
private bool _IsChanged = false;
public bool IsChanged()
{
var result = _IsChanged;
_IsChanged = false;
return result;
}
}
var list = new List<int>() {};
Random r = new Random();
for (int i = 0; i < 1000; i++)
{
list.Add(r.Next());
}
var comparer = new IntComp();
Stopwatch w = new Stopwatch();
w.Start();
list.Sort(comparer);
w.Stop();
Debug.WriteLine(comparer.IsChanged() + ", " + w.Elapsed);
w.Restart();
list.Sort(comparer);
w.Stop();
Debug.WriteLine(comparer.IsChanged() + ", " + w.Elapsed);
私は知りたいと思っています...なぜ知りたいですか? – peval27
注文が変更されていない場合は、UIを更新する必要はありません。 –
次にソートする前にソートされているかどうかを検出することを示唆する答えに従ってください。 –