Taal

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

Definitie

Vergelijkt het huidige Tuple<T1,T2,T3,T4,T5> object met een opgegeven object met behulp van een opgegeven vergelijking en retourneert een geheel getal dat aangeeft of het huidige object zich vóór, na of op dezelfde positie bevindt als het opgegeven object in de sorteervolgorde.

 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

Parameters

other
Object

Een object dat moet worden vergeleken met het huidige exemplaar.

comparer
IComparer

Een object dat aangepaste regels biedt voor vergelijking.

Retouren

Een ondertekend geheel getal dat de relatieve positie van dit exemplaar en other in de sorteervolgorde aangeeft, zoals wordt weergegeven in de volgende tabel.

Waarde Beschrijving
Een negatief geheel getal Dit exemplaar wordt voorafgegaan door other.
Nul Dit exemplaar en other hebben dezelfde positie in de sorteervolgorde.
Een positief geheel getal Dit exemplaar volgt other.

Implementeringen

Uitzonderingen

Voorbeelden

In het volgende voorbeeld wordt een matrix gemaakt van Tuple<T1,T2,T3,T4,T5> objecten die statistische gegevens voor carrière bevatten voor het teruglopen van back-ups in amerikaanse professionele voetbal. De onderdelen van de 5 tuple bestaan uit de naam van de speler, het aantal wedstrijden waarin hij heeft gespeeld, het aantal draag- of pogingen, het totale aantal opgedane meters en het aantal punten dat is gescoord. In het voorbeeld ziet u de onderdelen van elke tuple in de matrix in niet-gesorteerde volgorde, sorteert u de matrix en roept ToString u vervolgens aan om elke tuple in gesorteerde volgorde weer te geven. Als u de matrix wilt sorteren, definieert het voorbeeld een algemene YardsGained klasse waarmee de IComparer interface wordt geïmplementeerd en de Tuple<T1,T2,T3,T4,T5> objecten in aflopende volgorde worden gesorteerd op de waarde van hun vierde onderdeel (meter verkregen) in plaats van op hun eerste onderdeel. Houd er rekening mee dat in het voorbeeld de methode niet rechtstreeks wordt aangeroepen IStructuralComparable.CompareTo . Deze methode wordt impliciet aangeroepen door de Array.Sort(Array, IComparer) methode voor elk element in de matrix.

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)

Opmerkingen

Dit lid is een expliciete implementatie van interfaceleden. Deze kan alleen worden gebruikt wanneer het Tuple<T1,T2,T3,T4,T5> exemplaar naar een IStructuralComparable interface wordt gecast.

Hoewel deze methode rechtstreeks kan worden aangeroepen, wordt deze meestal genoemd door methoden voor het sorteren van verzamelingen die parameters bevatten IComparer om de leden van een verzameling te ordenen. Het wordt bijvoorbeeld aangeroepen door de Array.Sort(Array, IComparer) methode en de Add methode van een SortedList object dat wordt geïnstantieerd met behulp van de SortedList.SortedList(IComparer) constructor.

Caution

De IStructuralComparable.CompareTo methode is bedoeld voor gebruik in sorteerbewerkingen. Het mag niet worden gebruikt wanneer het primaire doel van een vergelijking is om te bepalen of twee objecten gelijk zijn. Als u wilt bepalen of twee objecten gelijk zijn, roept u de IStructuralEquatable.Equals(Object, IEqualityComparer) methode aan.

Van toepassing op