Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Array.Sort<T>-Methode: (T[], Comparison<T>)

 

Veröffentlicht: Oktober 2016

Sortiert die Elemente in einem Array mithilfe des angegebenen Comparison<T>.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public static void Sort<T>(
	T[] array,
	Comparison<T> comparison
)

Parameter

array
Type: T[]

Das zu sortierende eindimensionale und nullbasierte Array.

comparison
Type: System.Comparison<T>

Die Comparison<T>, die beim Vergleich von Elementen verwendet werden soll.

Typparameter

T

Der Typ der Elemente des Arrays.

Exception Condition
ArgumentNullException

array ist null.

- oder -

comparison ist null.

ArgumentException

Die Implementierung von comparison hat einen Fehler während der Sortierung verursacht. Beispielsweise gibt comparison beim Vergleichen eines Elements mit sich selbst möglicherweise nicht 0 zurück.

Wenn die Sortierung nicht erfolgreich abgeschlossen wird, sind die Ergebnisse nicht definiert.

Diese Methode verwendet introspective Sortieralgorithmus (Introsort) wie folgt aus:

  • Wenn die Partitionsgröße Elemente weniger als 16 ist, verwendet eine insertion sort Algorithmus.

  • Überschreitet die Anzahl der Partitionen 2 * LogN, wobei N ist der Bereich des Eingabearrays, verwendet er eine Heapsort Algorithmus.

  • Andernfalls wird eine Quicksort Algorithmus.

Diese Implementierung führt eine instabile Sortierung aus. Das heißt, dass die Reihenfolge gleicher Elemente unter Umständen nicht beibehalten werden kann. Im Gegensatz dazu behält eine stabile Sortierung die Reihenfolge der Elemente, die gleich sind.

Für Arrays, die mithilfe von Algorithmen Heapsort und Quicksort im schlimmsten Fall sortiert sind, ist diese Methode eine O (n Protokoll n)-Vorgang, in dem n ist die Length von array.

Hinweise für Aufrufer:

Der .NET Framework 4 und früheren Versionen wird nur den Quicksort-Algorithmus verwendet. QuickSort identifiziert ungültige Vergleiche in einigen Situationen, in dem der Sortiervorgang löst, ein IndexOutOfRangeException Ausnahme und löst eine ArgumentException Ausnahme an den Aufrufer. Beginnend mit der .NET Framework 4.5, es ist möglich, dass ausgelöst, das zuvor Sortiervorgänge hat ArgumentException eine Ausnahme wird nicht ausgelöst werden, da die Einfügung sortieren und Heapsort Algorithmen ein ungültiger Vergleich nicht erkennen. Dies gilt meistens, für Arrays mit weniger als 16 Elementen.

Das folgende Codebeispiel veranschaulicht die Sort(Comparison<T>) -methodenüberladung.

Das Codebeispiel definiert eine alternative Vergleichsmethode für Zeichenfolgen, die mit dem Namen CompareDinosByLength. Diese Methode funktioniert wie folgt: zunächst die Comparandsare getestet fürnull, und ein null-Verweis als kleiner als ein Wert ungleich Null behandelt wird. Zweitens die Zeichenfolgenlängen verglichen werden, und die Zeichenfolge längere ist als größer werden. Wenn die Länge gleich sind, wird im dritten gewöhnliche Zeichenfolgenvergleich verwendet.

Ein Array von Zeichenfolgen erstellt und mit vier Zeichenfolgen ohne bestimmte Reihenfolge aufgefüllt. Die Liste enthält auch eine leere Zeichenfolge und ein null-Verweis. Die Liste wird angezeigt, sortiert, mit einem Comparison<T> generischer Delegat darstellt der CompareDinosByLength -Methode, und erneut angezeigt.

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal. 
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater. 
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the 
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        string[] dinosaurs = {
            "Pachycephalosaurus",
            "Amargasaurus",
            "",
            null,
            "Mamenchisaurus",
            "Deinonychus" };
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        Array.Sort(dinosaurs, CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(string[] arr)
    {
        Console.WriteLine();
        foreach( string s in arr )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: