Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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

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

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

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

Typparameter

T

Der Typ der Elemente des Arrays.

Parameter

array
Typ: T[]
Das zu sortierende eindimensionale und nullbasierte Array.
comparison
Typ: System.Comparison<T>
Die Comparison<T>, die beim Vergleich von Elementen verwendet werden soll.

AusnahmeBedingung
ArgumentNullException

array ist null.

- oder -

comparison ist null.

ArgumentException

Die Implementierung von comparison hat während der Sortierung einen Fehler verursacht. comparison kann z. B. möglicherweise nicht 0 zurückgeben, wenn ein Element mit sich selbst verglichen wird.

Wenn der Sortiervorgang nicht erfolgreich abgeschlossen werden kann, ist das Ergebnis undefiniert.

Diese Methode verwendet introspektiven Algorithmus der Sortierung (introsort), wie folgt:

  • Wenn die Partitionsgröße weniger als 16 Elemente ist, verwendet sie einen Einfügungssortierung Algorithmus.

  • Wenn die Anzahl der Partitionen 2 überschreitet * protokollieren Sie N, wobei N der Bereich des Eingabearrays ist, es verwendet einen Heapsort Algorithmus.

  • Andernfalls verwendet sie einen Quicksort Algorithmus.

Diese Implementierung führt eine instabile Sortierung durch, d. h., bei zwei gleichen Elementen wird die Reihenfolge möglicherweise nicht beibehalten. Bei einer stabilen Sortierung wird im Gegensatz dazu die Reihenfolge von gleichen Elementen beibehalten.

Für Arrays, die sortiert werden, indem das Heapsort verwendet und Quicksort-Algorithmen, im ungünstigsten Fall, diese Methode ein Vorgang zu O (n Protokoll n), wobei n von Lengtharray ist.

Hinweise zu Aufrufern

. .NET Framework 4 und früheren Versionen wurde nur des QuickSort-Algorithmus. Quicksort identifiziert ungültige Vergleiche in einigen Situationen, in denen der Sortierung eine IndexOutOfRangeException Ausnahme auslöst, und löst eine ArgumentException Ausnahme zum Aufrufer aus. Ab .NET Framework 4.5, ist es möglich, dass Sortiervorgänge, die zuvor ArgumentException auslösen, keine Ausnahme ausgelöst, da die Einfüge- Sortier- und heapsortalgorithmen keinen ungültigen Vergleich erkennen. In den meisten Fällen wird dies auf Arrays mit weniger als 16 Elemente zu.

Im folgenden Codebeispiel wird die Sort(Comparison<T>)-Methodenüberladung veranschaulicht.

Im Codebeispiel wird eine alternative Vergleichsmethode für Zeichenfolgen mit der Bezeichnung CompareDinosByLength definiert. Dieses Verfahren funktioniert folgendermaßen: Zunächst werden die zu vergleichenden Objekte auf null getestet, und ein NULL-Verweis wird als kleiner angesehen als ein Nicht-NULL-Verweis. Dann werden die Zeichenfolgenlängen verglichen, und die längere Zeichenfolge wird als größer betrachtet. In einem dritten Schritt wird der gewöhnliche Zeichenfolgenvergleich verwendet, wenn die Längen übereinstimmen.

Es wird ein Array von Zeichenfolgen erstellt und ohne bestimmte Reihenfolge mit vier Zeichenfolgen aufgefüllt. Die Liste enthält auch eine leere Zeichenfolge und einen NULL-Verweis. Die Liste wird angezeigt, mithilfe eines generischen Comparison<T>-Delegaten, der die CompareDinosByLength-Methode darstellt, sortiert 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"
 */


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft