我有一个名为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 当我对列表进行排序时,这两个对象的位置会发生变化。但我不希望这种情况发生。我该怎么办?
答案 0 :(得分:2)
Sort执行快速排序,这是一种不稳定的排序。
如果您想要稳定排序,可以使用LinQ提供的OrderBy
方法
在您的示例中使用OrderBy
假设mList
是List<>
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;
}
}