(0) exportieren 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-Methode (Array, Array, Int32, Int32, IComparer)

Sortiert einen Bereich von Elementen in einem Paar von eindimensionalen Array-Objekten (das eine enthält die Schlüssel und das andere die entsprechenden Werte) nach den Schlüsseln im ersten Array und verwendet dabei den angegebenen IComparer.

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

public static void Sort(
	Array keys,
	Array items,
	int index,
	int length,
	IComparer comparer
)

Parameter

keys
Typ: System.Array
Das eindimensionale Array mit den zu sortierenden Schlüsseln.
items
Typ: System.Array
Das eindimensionale Array mit den Elementen, die den jeweiligen Schlüsseln im keys-Array entsprechen.
- oder -
null , wenn nur das keys-Array sortiert werden soll.
index
Typ: System.Int32
Der Startindex des zu sortierenden Bereichs.
length
Typ: System.Int32
Die Anzahl der Elemente im zu sortierenden Bereich.
comparer
Typ: System.Collections.IComparer
Die IComparer-Implementierung, die beim Vergleich von Elementen verwendet werden soll.
- oder -
null , wenn die IComparable-Implementierung des jeweiligen Elements verwendet werden soll.

AusnahmeBedingung
ArgumentNullException

keys ist null.

RankException

Das keysArray ist mehrdimensional.

- oder -

Das itemsArray ist mehrdimensional.

ArgumentOutOfRangeException

index ist kleiner als die untere Grenze von keys.

- oder -

length ist kleiner als 0 (null).

ArgumentException

items ist nicht null, und die untere Grenze von keys entspricht nicht der unteren Grenze von items.

- oder -

items ist nicht null, und die Länge von keys ist größer als die Länge von items.

- oder -

index und length geben keinen gültigen Bereich im keysArray an.

- oder -

items ist nicht null, und index und length geben keinen gültigen Bereich im itemsArray an.

- oder -

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

InvalidOperationException

comparer ist null, und mindestens ein Element im keysArray implementiert die IComparable-Schnittstelle nicht.

Zu jedem Schlüssel im keys-Array ist ein entsprechendes Element im items-Array vorhanden. Wenn ein Schlüssel bei der Sortierung neu angeordnet wird, wird auch das entsprechende Element im items-Array neu positioniert. Daher wird das items-Array gemäß der Anordnung der entsprechenden Schlüssel im keys-Array sortiert.

Wenn comparernull ist, muss jeder Schlüssel im angegebenen Bereich von Elementen im keys-Array die IComparable-Schnittstelle implementieren, damit er mit jedem anderen Schlüssel verglichen werden kann.

Sie können sortieren, wenn es mehr Elemente als Schlüssel gibt, aber Elemente ohne entsprechenden Schlüssel werden nicht sortiert. Sie können nicht sortieren, wenn es mehr Schlüssel als Elemente gibt. Hierbei wird eine ArgumentException ausgelöst.

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

Diese Methode verwendet den 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) ist n, length 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 Beispiel wird das Sortieren von zwei verknüpften Arrays veranschaulicht, wobei das erste Array die Schlüssel und das zweite Array die Werte enthält. Sortierungen werden mit dem Standardcomparer und einem benutzerdefinierten Comparer durchgeführt, der die Sortierreihenfolge umkehrt. Beachten Sie, dass das Ergebnis in Abhängigkeit von der aktuellen CultureInfo variieren kann.


using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/* 
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/



.NET Framework

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

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

.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:
© 2014 Microsoft