2

タイプ別に並べ替えたオブジェクトの配列があります。その配列内には、すでに好ましい相対順序になっている 1 つのタイプのオブジェクトのセットがあります。ソート後、これらのオブジェクトはグループ化されますが、同じ順序ではなくなります。次の並べ替えを使用しています

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

元の順序を維持することを約束するソート方法を探しましたが、何も見つかりませんでした。

回避策はありますが、コードに不必要な混乱をもたらし、将来発生した場合に一般的な問題に対処することはありません。

4

2 に答える 2

2

問題はArray.Sort<T>(T[], IComparer<T>) 、安定したソートを使用していないことです。

この実装は、不安定な並べ替えを実行します。つまり、2 つの要素が等しい場合、それらの順序は保持されない可能性があります。対照的に、安定した並べ替えは、等しい要素の順序を保持します。

他の方法を使用して配列をソートする必要があります。

于 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 に答える