War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
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>.IStructuralComparable.CompareTo-Methode

.NET Framework 4.6 and 4.5

Vergleicht das aktuelle Tuple<T1, T2, T3, T4, T5, T6>-Objekt mithilfe eines angegebenen Vergleichs mit einem angegebenen Objekt und gibt eine ganze Zahl zurück, die angibt, ob sich das aktuelle Element in der Sortierreihenfolge vor, hinter oder an derselben Position wie das angegebene Element 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>-Objekt.

Bei diesem Member handelt es sich um eine explizite Schnittstellenmemberimplementierung. Er kann nur verwendet werden, wenn die Tuple<T1, T2, T3, T4, T5, T6>-Instanz in eine IStructuralComparable-Schnittstelle umgewandelt wird.

Diese Methode lässt Sie benutzerdefinierte Vergleiche von Tuple<T1, T2, T3, T4, T5, T6>-Objekten definieren. Sie können mit dieser Methode beispielsweise Tuple<T1, T2, T3, T4, T5, T6>-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(Object, IEqualityComparer)-Methode auf, um zu bestimmen, ob zwei Objekte gleich sind.

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

Die PopulationComparer-Klasse stellt eine IComparer-Implementierung bereit, die dem Array von Sextupeln 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 1970) sortiert und angezeigt, und sie werden dann nach der sechsten Komponente (die Bevölkerung in 2000) sortiert und angezeigt.


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

public class PopulationComparer<T1, T2, T3, T4, T5, T6> : 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 > 6)
         throw new ArgumentException("The component argument is out of range.");

      itemPosition = component;
   }

   public int Compare(object x, object y)
   {
      var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
      if (tX == null)
      {
         return 0;
      }
      else
      {
         var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
         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;
            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>[] cities =
           { Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
             Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
             Tuple.Create("Chicago", 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>(3));

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

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

      // Display array in sorted order.
      Console.WriteLine("Sorted by population in 2000:");
      foreach (var city in cities)
         Console.WriteLine(city.ToString());
   }
}
// The example displays the following output:
//    In unsorted order:
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    
//    Sorted by population in 1970:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    
//    Sorted by population in 2000:
//    (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
//    (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//    (Chicago, 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