2

我有一个按类型排序的对象数组。在该数组中是一组已按其首选相对顺序的一种类型的对象。排序后,这些对象被组合在一起,但不再以相同的顺序排列。我正在使用以下排序

Array.Sort(形状, GetVisualComparer());

我一直在寻找一种承诺保留原始顺序的排序方法,但一无所获。

我会注意到我有一个解决方法,但是它给代码增加了不必要的混乱,并且如果将来出现,它也不能解决一般问题。

4

2 回答 2

2

问题是Array.Sort<T>(T[], IComparer<T>) 没有使用 stable sort

此实现执行不稳定的排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定排序保留了相等元素的顺序。

您必须使用其他方法对数组进行排序。

于 2013-08-13T22:11:03.387 回答
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;
    }
}
于 2013-08-13T22:12:18.120 回答