(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
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Array.Sort-Methode (Array, Array, IComparer)

Sortiert ein 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,
	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.
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.

ArgumentException

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

- 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 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), wobei n von Lengthkeys 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 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, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

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)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.