Tuple<T1,T2,T3,T4,T5>.IStructuralComparable.CompareTo Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Vergleicht das aktuelle Tuple<T1,T2,T3,T4,T5>-Objekt anhand 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 dem angegebenen Element, 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
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,T2,T3,T4,T5>-Objekt.
Beispiele
Im folgenden Beispiel wird ein Array von Tuple<T1,T2,T3,T4,T5> Objekten erstellt, die statistische Karrieredaten für die Ausführung von Backs in American Professional Football enthalten. Die Komponenten des 5-Tupels bestehen aus dem Namen des Spielers, der Anzahl der Spiele, in denen er gespielt hat, die Anzahl der Tragen oder Versuche, die Gesamtzahl der gewonnenen Yards und die Anzahl der Touchdowns. Im Beispiel werden die Komponenten jedes Tuples im Array in nicht sortierter Reihenfolge angezeigt, das Array sortiert und dann aufgerufen ToString , um jedes Tupel in sortierter Reihenfolge anzuzeigen. Um das Array zu sortieren, definiert das Beispiel eine generische YardsGained
Klasse, die die IComparer Schnittstelle implementiert und die Tuple<T1,T2,T3,T4,T5> Objekte in absteigender Reihenfolge nach dem Wert ihrer vierten Komponente sortiert (von der gewonnenen Yards) statt durch ihre erste Komponente. Beachten Sie, dass das Beispiel die IStructuralComparable.CompareTo Methode nicht direkt aufruft. Diese Methode wird implizit durch die Array.Sort(Array, IComparer) Methode für jedes Element im Array aufgerufen.
using System;
using System.Collections;
using System.Collections.Generic;
public class YardsGained<T1, T2, T3, T4, T5> : IComparer
{
public int Compare(object x, object y)
{
Tuple<T1, T2, T3, T4, T5> tX = x as Tuple<T1, T2, T3, T4, T5>;
if (tX == null)
{
return 0;
}
else
{
Tuple<T1, T2, T3, T4, T5> tY = y as Tuple<T1, T2, T3, T4, T5>;
return -1 * Comparer<T4>.Default.Compare(tX.Item4, tY.Item4);
}
}
}
public class Example
{
public static void Main()
{
// Organization of runningBacks 5-tuple:
// Component 1: Player name
// Component 2: Number of games played
// Component 3: Number of attempts (carries)
// Component 4: Number of yards gained
// Component 5: Number of touchdowns
Tuple<string, int, int, int, int>[] runningBacks =
{ Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) };
// Display the array in unsorted order.
Console.WriteLine("The values in unsorted order:");
foreach (var runningBack in runningBacks)
Console.WriteLine(runningBack.ToString());
Console.WriteLine();
// Sort the array
Array.Sort(runningBacks, new YardsGained<string, int, int, int, int>());
// Display the array in sorted order.
Console.WriteLine("The values in sorted order:");
foreach (var runningBack in runningBacks)
Console.WriteLine(runningBack.ToString());
}
}
// The example displays the following output:
// The values in unsorted order:
// (Payton, Walter, 190, 3838, 16726, 110)
// (Sanders, Barry, 153, 3062, 15269, 99)
// (Brown, Jim, 118, 2359, 12312, 106)
// (Dickerson, Eric, 144, 2996, 13259, 90)
// (Faulk, Marshall, 176, 2836, 12279, 100)
//
// The values in sorted order:
// (Brown, Jim, 118, 2359, 12312, 106)
// (Dickerson, Eric, 144, 2996, 13259, 90)
// (Faulk, Marshall, 176, 2836, 12279, 100)
// (Payton, Walter, 190, 3838, 16726, 110)
// (Sanders, Barry, 153, 3062, 15269, 99)
open System
open System.Collections
open System.Collections.Generic
type YardsGained<'T1, 'T2, 'T3, 'T4, 'T5>() =
interface IComparer with
member _.Compare(x, y) =
match x with
| :? Tuple<'T1, 'T2, 'T3, 'T4, 'T5> as tX ->
let tY = y :?> Tuple<'T1, 'T2, 'T3, 'T4, 'T5>
-1 * Comparer<'T4>.Default.Compare(tX.Item4, tY.Item4)
| _ -> 0
// Organization of runningBacks 5-tuple:
// Component 1: Player name
// Component 2: Number of games played
// Component 3: Number of attempts (carries)
// Component 4: Number of yards gained
// Component 5: Number of touchdowns
let runningBacks =
[| Tuple.Create("Payton, Walter", 190, 3838, 16726, 110)
Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99)
Tuple.Create("Brown, Jim", 118, 2359, 12312, 106)
Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90)
Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) |]
// Display the array in unsorted order.
printfn "The values in unsorted order:"
for runningBack in runningBacks do
printfn $"{runningBack}"
printfn ""
// Sort the array
Array.Sort(runningBacks, YardsGained<string, int, int, int, int>())
// Display the array in sorted order.
printfn "The values in sorted order:"
for runningBack in runningBacks do
printfn $"{runningBack}"
// The example displays the following output:
// The values in unsorted order:
// (Payton, Walter, 190, 3838, 16726, 110)
// (Sanders, Barry, 153, 3062, 15269, 99)
// (Brown, Jim, 118, 2359, 12312, 106)
// (Dickerson, Eric, 144, 2996, 13259, 90)
// (Faulk, Marshall, 176, 2836, 12279, 100)
//
// The values in sorted order:
// (Brown, Jim, 118, 2359, 12312, 106)
// (Dickerson, Eric, 144, 2996, 13259, 90)
// (Faulk, Marshall, 176, 2836, 12279, 100)
// (Payton, Walter, 190, 3838, 16726, 110)
// (Sanders, Barry, 153, 3062, 15269, 99)
Imports System.Collections
Imports System.Collections.Generic
Public Class YardsGained(Of T1, T2, T3, T4, T5) : Implements IComparer
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim tX As Tuple(Of T1, T2, T3, T4, T5) = TryCast(x, Tuple(Of T1, T2, T3, T4, T5))
If tX Is Nothing Then
Return 0
Else
Dim tY As Tuple(Of T1, T2, T3, T4, T5) = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5))
Return -1 * Comparer(Of T4).Default.Compare(tx.Item4, tY.Item4)
End If
End Function
End Class
Module Example
Public Sub Main()
' Organization of runningBacks 5-tuple:
' Component 1: Player name
' Component 2: Number of games played
' Component 3: Number of attempts (carries)
' Component 4: Number of yards gained
' Component 5: Number of touchdowns
Dim runningBacks() =
{ Tuple.Create("Payton, Walter", 190, 3838, 16726, 110),
Tuple.Create("Sanders, Barry", 153, 3062, 15269, 99),
Tuple.Create("Brown, Jim", 118, 2359, 12312, 106),
Tuple.Create("Dickerson, Eric", 144, 2996, 13259, 90),
Tuple.Create("Faulk, Marshall", 176, 2836, 12279, 100) }
' Display the array in unsorted order.
Console.WriteLine("The values in unsorted order:")
For Each runningBack In runningBacks
Console.WriteLine(runningBack.ToString())
Next
Console.WriteLine()
' Sort the array
Array.Sort(runningBacks, New YardsGained(Of String, Integer, Integer, Integer, Integer)())
' Display the array in sorted order.
Console.WriteLine("The values in sorted order:")
For Each runningBack In runningBacks
Console.WriteLine(runningBack.ToString())
Next
End Sub
End Module
' The example displays the following output:
' The values in unsorted order:
' (Payton, Walter, 190, 3838, 16726, 110)
' (Sanders, Barry, 153, 3062, 15269, 99)
' (Brown, Jim, 118, 2359, 12312, 106)
' (Dickerson, Eric, 144, 2996, 13259, 90)
' (Faulk, Marshall, 176, 2836, 12279, 100)
'
' The values in sorted order:
' (Payton, Walter, 190, 3838, 16726, 110)
' (Sanders, Barry, 153, 3062, 15269, 99)
' (Dickerson, Eric, 144, 2996, 13259, 90)
' (Brown, Jim, 118, 2359, 12312, 106)
' (Faulk, Marshall, 176, 2836, 12279, 100)
Hinweise
Bei diesem Member handelt es sich um eine explizite Schnittstellenmemberimplementierung. Er kann nur verwendet werden, wenn die Tuple<T1,T2,T3,T4,T5>-Instanz in eine IStructuralComparable-Schnittstelle umgewandelt wird.
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(Object, IEqualityComparer) Methode auf, um zu bestimmen, ob zwei Objekte gleich sind.