Freigeben über


Tuple<T1>.IStructuralComparable.CompareTo(Object, IComparer) Methode

Definition

Vergleicht das aktuelle Tuple<T1>-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.

 virtual int System.Collections.IStructuralComparable.CompareTo(System::Object ^ other, System::Collections::IComparer ^ comparer) = System::Collections::IStructuralComparable::CompareTo;
int IStructuralComparable.CompareTo (object other, System.Collections.IComparer comparer);
abstract member System.Collections.IStructuralComparable.CompareTo : obj * System.Collections.IComparer -> int
override this.System.Collections.IStructuralComparable.CompareTo : obj * System.Collections.IComparer -> int
Function CompareTo (other As Object, comparer As IComparer) As Integer Implements IStructuralComparable.CompareTo

Parameter

other
Object

Ein Objekt, das mit der aktuellen Instanz verglichen werden soll.

comparer
IComparer

Ein Objekt, das benutzerdefinierte Regeln für Vergleiche bereitstellt.

Gibt zurück

Int32

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

Wert BESCHREIBUNG
Eine negative ganze Zahl Diese Instanz geht other voran.
Zero Diese Instanz und other befinden sich in der Sortierreihenfolge an der gleichen Position.
Eine positive ganze Zahl Diese Instanz folgt other.

Implementiert

Ausnahmen

other ist kein Tuple<T1>-Objekt.

Beispiele

Im folgenden Beispiel wird eine generische Klasse definiert DescendingComparer , die die IComparer<T> Schnittstelle implementiert. DescendingComparer sortiert Objekte in absteigender Statt aufsteigender Reihenfolge, indem der vom Standardvergleicher für einen bestimmten Typ zurückgegebene Wert umgekehrt wird. Eine Instanz der generischen DescendingComparer Klasse wird dann an die Array.Sort(Array, IComparer) Methode übergeben, um ein Array von Tuple<T1> Objekten in absteigender Reihenfolge zu sortieren. Beachten Sie, dass das Beispiel die IStructuralComparable.CompareTo Methode nicht direkt aufruft. Diese Methode wird implizit von der Array.Sort(Array, IComparer) Methode für jedes Element im Array aufgerufen.

using System;
using System.Collections.Generic;

public class DescendingComparer<T> : IComparer<T>
{
    public int Compare(T x, T y) 
    {
        return -1 * Comparer<T>.Default.Compare(x, y);
    }
}

class CompareTo2
{
   static void Main()
   {
       Tuple<Double>[] values = { Tuple.Create(13.54),
                                  Tuple.Create(Double.NaN),
                                  Tuple.Create(-189.42993),
                                  Tuple.Create(Double.PositiveInfinity),
                                  Tuple.Create(Double.Epsilon),
                                  Tuple.Create(1.934E-17),
                                  Tuple.Create(Double.NegativeInfinity),
                                  Tuple.Create(-0.000000000003588),
                                  null };
       Console.WriteLine("The values in unsorted order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
       Console.WriteLine();

       Array.Sort(values, new DescendingComparer<Tuple<Double>>());

       Console.WriteLine("The values sorted in descending order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
    }
}
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN
open System
open System.Collections.Generic

type DescendingComparer<'T>() =
    interface IComparer<'T> with
        member _.Compare(x: 'T, y: 'T) = 
            -1 * Comparer<'T>.Default.Compare(x, y)

let values = 
    [| Tuple.Create 13.54
       Tuple.Create Double.NaN
       Tuple.Create -189.42993
       Tuple.Create Double.PositiveInfinity
       Tuple.Create Double.Epsilon
       Tuple.Create 1.934E-17
       Tuple.Create Double.NegativeInfinity
       Tuple.Create -0.000000000003588
       null |]
printfn "The values in unsorted order:"
for value in values do
    printfn $"   %A{value.Item1}"
printfn ""

Array.Sort(values, DescendingComparer<Tuple<Double>>())

printfn "The values sorted in descending order:"
for value in values do
    printfn $"   %A{value.Item1}"
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN
Imports System.Collections.Generic

Public Class DescendingComparer(Of T) : Implements IComparer(Of T)
    Public Function Compare(ByVal x As T, ByVal y As T) As Integer Implements IComparer(Of T).Compare
        Return -1 * Comparer(Of T).Default.Compare(x, y)
    End Function
End Class

Module Example
    Sub Main()
        Dim values() = { Tuple.Create(13.54),
                         Tuple.Create(Double.NaN),
                         Tuple.Create(-189.42993),
                         Tuple.Create(Double.PositiveInfinity),
                         Tuple.Create(Double.Epsilon),
                         Tuple.Create(1.934E-17),
                         Tuple.Create(Double.NegativeInfinity),
                         Tuple.Create(-0.000000000003588),
                         Nothing}

        Console.WriteLine("The values in unsorted order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
        Console.WriteLine()

        Array.Sort(values, New DescendingComparer(Of Tuple(Of Double)))

        Console.WriteLine("The values sorted in descending order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'      The values in unsorted order:
'         13.54
'         NaN
'         -189.42993
'         Infinity
'         4.94065645841247E-324
'         1.934E-17
'         -Infinity
'         -3.588E-12
'
'      The values sorted in descending order:
'         Infinity
'         13.54
'         1.934E-17
'         4.94065645841247E-324
'         -3.588E-12
'         -189.42993
'         -Infinity
'         NaN

Hinweise

Obwohl diese Methode direkt aufgerufen werden kann, wird sie am häufigsten von Sammlungssortiermethoden aufgerufen, die Parameter enthalten IComparer , um die Elemente einer Auflistung zu ordnen. Sie wird beispielsweise von der Array.Sort(Array, IComparer) Methode und der Add Methode eines SortedList Objekts aufgerufen, das mithilfe des SortedList.SortedList(IComparer) Konstruktors instanziiert wird.

Achtung

Die IStructuralComparable.CompareTo Methode ist für die Verwendung in Sortiervorgängen vorgesehen. Es sollte nicht verwendet werden, wenn der hauptzweck eines Vergleichs besteht, um zu bestimmen, ob zwei Objekte gleich sind. Rufen Sie die IStructuralEquatable.Equals Methode auf, um zu bestimmen, ob zwei Objekte gleich sind.

Gilt für

Siehe auch