按项目类型对数组进行排序

本文关键字:排序 数组 项目 类型 | 更新日期: 2023-09-27 18:27:38

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

Array.Sort(shapes,GetVisualComparer());

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

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

按项目类型对数组进行排序

复制原始数组。然后,如果元素的类型相等,则让比较器比较元素的原始索引。

我不知道你的类型排序是基于什么,但按名称排序,它看起来有点像这样:

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;
    }
}

问题是Array.Sort<T>(T[], IComparer<T>)没有使用稳定的排序。

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

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