【发布时间】:2017-02-10 23:29:54
【问题描述】:
例如,如果List 包含{1,2,3,4,5},则调用Sort() 不会改变任何内容。但是如果列表中包含{1,2,4,3,5},那么调用Sort() 会改变顺序。
有什么方法可以知道Sort() 是否改变了什么?该方法返回void。
附言
实际上,我在发布此问题之前对此进行了测试。这个想法是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);
【问题讨论】:
-
我很想知道...你为什么想知道?
-
如果订单没有改变,我不必更新UI。
-
然后按照建议您在排序之前检测它是否已排序的答案。
标签: c#