Tuple<T1,T2>.IStructuralComparable.CompareTo(Object, IComparer) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Compare l'objet Tuple<T1,T2> actif à un objet spécifié à l'aide d'un comparateur spécifié et retourne un entier qui indique si l'objet actif précède, suit ou est dans la même position que l'objet spécifié dans l'ordre de tri.
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
Paramètres
- other
- Object
Objet à comparer à l'instance actuelle.
- comparer
- IComparer
Un objet qui fournit des règles personnalisées pour la comparaison.
Retours
Entier signé qui indique la position relative de cette instance et de other
dans l’ordre de tri, comme indiqué dans le tableau suivant.
Valeur | Description |
---|---|
Entier négatif | Cette instance précède other .
|
Zéro | Cette instance et other ont la même position dans l'ordre de tri.
|
Entier positif | Cette instance suit other .
|
Implémente
Exceptions
other
n’est pas un objet Tuple<T1,T2>.
Exemples
L’exemple suivant crée un tableau d’objets Tuple<T1,T2> qui se composent du nom d’un étudiant et du score de test. Il affiche le composant de chaque tuple dans le tableau dans l’ordre non trié, trie le tableau, puis appelle ToString pour afficher la valeur de chaque tuple dans l’ordre trié. Pour trier le tableau, l’exemple définit une classe générique ScoreComparer
qui implémente l’interface IComparer et trie les Tuple<T1,T2> objets dans l’ordre croissant par la valeur de leur deuxième composant plutôt que par leur premier composant. Notez que l’exemple n’appelle pas directement la IStructuralComparable.CompareTo méthode. Cette méthode est appelée implicitement par la Array.Sort(Array, IComparer) méthode de chaque élément du tableau.
using System;
using System.Collections;
using System.Collections.Generic;
public class ScoreComparer<T1, T2> : IComparer
{
public int Compare(object x, object y)
{
Tuple<T1, T2> tX = x as Tuple<T1,T2>;
if (tX == null)
{
return 0;
}
else
{
Tuple<T1, T2> tY = y as Tuple<T1, T2>;
return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2);
}
}
}
public class Example
{
public static void Main()
{
Tuple<string, Nullable<int>>[] scores =
{ new Tuple<string, Nullable<int>>("Jack", 78),
new Tuple<string, Nullable<int>>("Abbey", 92),
new Tuple<string, Nullable<int>>("Dave", 88),
new Tuple<string, Nullable<int>>("Sam", 91),
new Tuple<string, Nullable<int>>("Ed", null),
new Tuple<string, Nullable<int>>("Penelope", 82),
new Tuple<string, Nullable<int>>("Linda", 99),
new Tuple<string, Nullable<int>>("Judith", 84) };
Console.WriteLine("The values in unsorted order:");
foreach (var score in scores)
Console.WriteLine(score.ToString());
Console.WriteLine();
Array.Sort(scores, new ScoreComparer<string, Nullable<int>>());
Console.WriteLine("The values in sorted order:");
foreach (var score in scores)
Console.WriteLine(score.ToString());
}
}
// The example displays the following output;
// The values in unsorted order:
// (Jack, 78)
// (Abbey, 92)
// (Dave, 88)
// (Sam, 91)
// (Ed, )
// (Penelope, 82)
// (Linda, 99)
// (Judith, 84)
//
// The values in sorted order:
// (Ed, )
// (Jack, 78)
// (Penelope, 82)
// (Judith, 84)
// (Dave, 88)
// (Sam, 91)
// (Abbey, 92)
// (Linda, 99)
open System
open System.Collections
open System.Collections.Generic
type ScoreComparer<'T1, 'T2>() =
interface IComparer with
member _.Compare(x: obj, y: obj) =
match x with
| :? Tuple<'T1, 'T2> as tX ->
let tY = y :?> Tuple<'T1, 'T2>
Comparer<'T2>.Default.Compare(tX.Item2, tY.Item2)
| _ -> 0
let scores =
[| Tuple<string, Nullable<int>>("Jack", 78)
Tuple<string, Nullable<int>>("Abbey", 92)
Tuple<string, Nullable<int>>("Dave", 88)
Tuple<string, Nullable<int>>("Sam", 91)
Tuple<string, Nullable<int>>("Ed", Nullable())
Tuple<string, Nullable<int>>("Penelope", 82)
Tuple<string, Nullable<int>>("Linda", 99)
Tuple<string, Nullable<int>>("Judith", 84) |]
printfn "The values in unsorted order:"
for score in scores do
printfn $"{score}"
printfn ""
Array.Sort(scores, ScoreComparer<string, Nullable<int>>())
printfn "The values in sorted order:"
for score in scores do
printfn $"{score}"
// The example displays the following output
// The values in unsorted order:
// (Jack, 78)
// (Abbey, 92)
// (Dave, 88)
// (Sam, 91)
// (Ed, )
// (Penelope, 82)
// (Linda, 99)
// (Judith, 84)
//
// The values in sorted order:
// (Ed, )
// (Jack, 78)
// (Penelope, 82)
// (Judith, 84)
// (Dave, 88)
// (Sam, 91)
// (Abbey, 92)
// (Linda, 99)
Imports System.Collections
Imports System.Collections.Generic
Public Class ScoreComparer(Of T1, T2) : Implements IComparer
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim tX As Tuple(Of T1, T2) = TryCast(x, Tuple(Of T1, T2))
If tX Is Nothing Then
Return 0
Else
Dim tY As Tuple(Of T1, T2) = DirectCast(y, Tuple(Of T1, T2))
Return Comparer(Of T2).Default.Compare(tx.Item2, tY.Item2)
End If
End Function
End Class
Module Example
Public Sub Main()
Dim scores() As Tuple(Of String, Nullable(Of Integer)) =
{ New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
New Tuple(Of String, Nullable(Of Integer))("Abbey", 92),
New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
New Tuple(Of String, Nullable(Of Integer))("Sam", 91),
New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),
New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
New Tuple(Of String, Nullable(Of Integer))("Judith", 84) }
Console.WriteLine("The values in unsorted order:")
For Each score In scores
Console.WriteLine(score.ToString())
Next
Console.WriteLine()
Array.Sort(scores, New ScoreComparer(Of String, Nullable(Of Integer))())
Console.WriteLine("The values in sorted order:")
For Each score In scores
Console.WriteLine(score.ToString())
Next
End Sub
End Module
' The example displays the following output;
' The values in unsorted order:
' (Jack, 78)
' (Abbey, 92)
' (Dave, 88)
' (Sam, 91)
' (Ed, )
' (Penelope, 82)
' (Linda, 99)
' (Judith, 84)
'
' The values in sorted order:
' (Ed, )
' (Jack, 78)
' (Penelope, 82)
' (Judith, 84)
' (Dave, 88)
' (Sam, 91)
' (Abbey, 92)
' (Linda, 99)
Remarques
Ce membre est une implémentation d'un membre d'interface explicite. Il peut uniquement être utilisé lorsque l'instance de Tuple<T1,T2> est castée en interface IStructuralComparable.
Bien que cette méthode puisse être appelée directement, elle est généralement appelée par des méthodes de tri de collection qui incluent des IComparer paramètres pour commander les membres d’une collection. Par exemple, elle est appelée par la méthode et la Array.Sort(Array, IComparer) Add méthode d’un SortedList objet instancié à l’aide du SortedList.SortedList(IComparer) constructeur.
Attention
La IStructuralComparable.CompareTo méthode est destinée à être utilisée dans les opérations de tri. Il ne doit pas être utilisé lorsque l’objectif principal d’une comparaison est de déterminer si deux objets sont égaux. Pour déterminer si deux objets sont égaux, appelez la IStructuralEquatable.Equals méthode.