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

Tuple<T1, T2, T3, T4, T5, T6, T7>.IStructuralComparable.CompareTo-Methode

.NET Framework 4.6 and 4.5

Vergleicht das aktuelle Tuple<T1, T2, T3, T4, T5, T6, T7>-Objekt anhand eines angegebenen Vergleichs mit einem angegebenen Objekt und gibt eine ganze Zahl zurück, die angibt, ob sich das aktuelle Objekt in der Sortierreihenfolge vor dem angegebenen Objekt, dahinter oder an derselben Position befindet.

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

int IStructuralComparable.CompareTo(
	Object other,
	IComparer comparer
)

Parameter

other
Typ: System.Object
Ein Objekt, das mit der aktuellen Instanz verglichen werden soll.
comparer
Typ: System.Collections.IComparer
Ein Objekt, das benutzerdefinierte Regeln für Vergleiche bereitstellt.

Rückgabewert

Typ: System.Int32
Eine ganze Zahl mit Vorzeichen, die die relative Position dieser Instanz und other in der Sortierreihenfolge angibt, wie in der folgenden Tabelle veranschaulicht.

Wert

Beschreibung

Eine negative ganze Zahl

Diese Instanz geht other voran.

0

Diese Instanz und other haben in der Sortierreihenfolge die gleiche Position.

Eine positive ganze Zahl

Diese Instanz folgt auf other.

Implementiert

IStructuralComparable.CompareTo(Object, IComparer)

AusnahmeBedingung
ArgumentException

other ist kein Tuple<T1, T2, T3, T4, T5, T6, T7>-Objekt.

Dieser Member ist eine explizite Schnittstellenimplementierung. Er kann nur verwendet werden, wenn die Tuple<T1, T2, T3, T4, T5, T6, T7>-Instanz in eine IStructuralComparable-Schnittstelle umgewandelt wird.

Diese Methode lässt Sie benutzerdefinierte Vergleiche von Tuple<T1, T2, T3, T4, T5, T6, T7>-Objekten definieren. Sie können mit dieser Methode beispielsweise Tuple<T1, T2, T3, T4, T5, T6, T7>-Objekte auf Grundlage des Werts einer bestimmten Komponente sortieren.

Obwohl diese Methode direkt aufgerufen werden kann, wird sie am häufigsten von Auflistungssortierung-Methoden aufgerufen, die IComparer-Parameter einschließen, um die Member einer Auflistung zu sortieren. Es wird z. B. von der Array.Sort(Array, IComparer)-Methode und der Add-Methode eines SortedList-Objekts aufgerufen, das mit dem SortedList.SortedList(IComparer)-Konstruktor instanziiert wird.

WarnhinweisVorsicht

Die IStructuralComparable.CompareTo-Methode ist hauptsächlich für Sortierungsvorgänge konzipiert. Sollte nicht verwendet werden, wenn der primäre Zweck eines Vergleichs darin besteht, zu bestimmen, ob zwei Objekte gleich sind. Rufen Sie die IStructuralEquatable.Equals-Methode auf, um zu bestimmen, ob zwei Objekte gleich sind.

Im folgenden Beispiel erstellt ein Array Tuple<T1, T2, T3, T4, T5, T6, T7>-Objekte, das Auffüllungsdaten für drei US-Orte von 1950 bis 2000 enthält. Die erste Komponente des Septupels ist der Ortsname. Die verbleibenden fünf Komponenten stellen die Bevölkerung bei 10-Jahres-Intervallen von 1950 bis 2000 dar.

Die PopulationComparer-Klasse stellt eine IComparer-Implementierung bereit, die dem Array von Septupeln ermöglicht, nach irgendeiner seiner Komponenten sortiert zu werden. Zwei Werte werden im Konstruktor für die PopulationComparer-Klasse bereitgestellt: Die Position der Komponente, die die Sortierreihenfolge definiert, und ein Boolean-Wert, der angibt, ob die Tupelobjekte in aufsteigender oder absteigender Reihenfolge sortiert werden sollen.

Im Beispiel werden dann die Elemente im Array in unsortierter Reihenfolge angezeigt, nach der dritten Komponente (die Bevölkerung in 1960) sortiert und angezeigt, und sie werden dann nach der sechsten Komponente (die Bevölkerung in 1990) sortiert und angezeigt.


using System;
using System.Collections;
using System.Collections.Generic;

public class PopulationComparer<T1, T2, T3, T4, T5, T6, T7> : IComparer
{
   private int itemPosition;
   private int multiplier = -1;

   public PopulationComparer(int component) : this(component, true)
   { }

   public PopulationComparer(int component, bool descending)
   {
      if (! descending) multiplier = 1;

      if (component <= 0 || component > 7)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      Tuple<T1, T2, T3, T4, T5, T6, T7> tX = x as Tuple<T1, T2, T3, T4, T5, T6, T7>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         Tuple<T1, T2, T3, T4, T5, T6, T7> tY = y as Tuple<T1, T2, T3, T4, T5, T6, T7>;
         switch (itemPosition)
         {
            case 1:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
            case 2:
               return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
            case 3:
               return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
            case 4:
               return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
            case 5:
               return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
            case 6:
               return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
            case 7:
               return Comparer<T7>.Default.Compare(tX.Item7, tY.Item7) * multiplier;
            default:
               return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
         }
      }
   }
}

public class Example
{
   public static void Main()
   {
      // Create array of sextuple with population data for three U.S.
      // cities, 1960-2000.
      Tuple<string, int, int, int, int, int, int>[] cities =
           { Tuple.Create("Los Angeles", 1970358, 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 3620962, 3550904, 3366957, 3005072, 2783726, 2896016) };

      // Display array in unsorted order.
      Console.WriteLine("In unsorted order:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int>(3));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1960:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
      Console.WriteLine();

      Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int, int>(6));

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 1990:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    
//    Sorted by population in 1960:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    
//    Sorted by population in 1990:
//    (New York, 7891957, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 1970358, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 3620962, 3550904, 3366957, 3005072, 2783726, 2896016)


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Unterstützt in: 4

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