Tuple<T1,T2,T3,T4,T5>.IStructuralComparable.CompareTo Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Confronta l'oggetto Tuple<T1,T2,T3,T4,T5> corrente con un oggetto specificato mediante un operatore di confronto specificato e restituisce un Integer che indica se l'oggetto corrente precede, segue o si trova nella stessa posizione dell'oggetto specificato all'interno dell'ordinamento.
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
Parametri
- other
- Object
Oggetto da confrontare con l'istanza corrente.
- comparer
- IComparer
Oggetto che fornisce regole personalizzate per il confronto.
Restituisce
Intero con segno che indica la posizione relativa di questa istanza e di other
nell'ordinamento, come illustrato nella tabella seguente.
Valore | Descrizione |
---|---|
Intero negativo | Questa istanza precede other .
|
Zero | Questa istanza si trova nella stessa posizione di other nell'ordinamento.
|
Intero positivo | L'istanza segue other .
|
Implementazioni
Eccezioni
other
non è un oggetto Tuple<T1,T2,T3,T4,T5>.
Esempio
Nell'esempio seguente viene creata una matrice di Tuple<T1,T2,T3,T4,T5> oggetti che contengono dati statistici di carriera per il runningback nel calcio professionistico americano. I componenti della tupla 5 sono costituiti dal nome del giocatore, dal numero di partite in cui ha giocato, dal numero di tentativi di porta o tentativi, dal numero totale di yard ottenute e dal numero di touchdown segnati. L'esempio visualizza i componenti di ogni tupla nella matrice in ordine non ordinato, ordina la matrice e quindi chiama ToString per visualizzare ogni tupla in ordine ordinato. Per ordinare la matrice, l'esempio definisce una classe generica YardsGained
che implementa l'interfaccia IComparer e ordina gli Tuple<T1,T2,T3,T4,T5> oggetti in ordine decrescente in base al valore del quarto componente (yard ottenuto) anziché al primo componente. Si noti che l'esempio non chiama direttamente il IStructuralComparable.CompareTo metodo . Questo metodo viene chiamato in modo implicito dal Array.Sort(Array, IComparer) metodo per ogni elemento nella matrice.
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)
Commenti
Questo membro è un’implementazione esplicita di un membro di interfaccia. Può essere utilizzato solo quando si esegue il cast dell'istanza Tuple<T1,T2,T3,T4,T5> a un'interfaccia IStructuralComparable.
Anche se questo metodo può essere chiamato direttamente, è più comunemente chiamato dai metodi di ordinamento della raccolta che includono IComparer parametri per ordinare i membri di una raccolta. Ad esempio, viene chiamato dal metodo e dal Array.Sort(Array, IComparer) Add metodo di un SortedList oggetto creato dall'istanza usando il SortedList.SortedList(IComparer) costruttore.
Attenzione
Il IStructuralComparable.CompareTo metodo è destinato all'uso nelle operazioni di ordinamento. Non deve essere usato quando lo scopo principale di un confronto è determinare se due oggetti sono uguali. Per determinare se due oggetti sono uguali, chiamare il IStructuralEquatable.Equals(Object, IEqualityComparer) metodo .