我有一个按类型排序的对象数组。在该数组中,是一组已经按其首选相对顺序排列的对象。排序后,这些对象组合在一起,但不再按相同的顺序排列。我正在使用以下排序
Array.Sort(shapes,GetVisualComparer());
我已经找到了一种承诺保留原始订单的排序方法,但却一无所获。
我会注意到我有一个解决方法,但它会给代码增加不必要的混淆,并且如果将来出现这个问题就不能解决一般问题。
答案 0 :(得分:2)
问题在于Array.Sort<T>(T[], IComparer<T>)
is not using a stable sort。
此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定的排序保留了相等元素的顺序。
您必须使用其他方法对数组进行排序。
答案 1 :(得分:2)
制作原始数组的副本。然后,让比较器比较元素的原始索引(如果它们的类型相等)。
我不知道您的类型排序基础,但按名称排序,它看起来有点像这样:
public class TypeComparer : IComparer<Type>
{
public int Compare(Type x, Type y)
{
int result = StringComparer.InvariantCulture.Compare(x.Name, y.Name);
if (result == 0)
{
result = Array.IndexOf(originalArray, x).CompareTo(Array.IndexOf(originalArray, y));
}
return result;
}
}