Tuple<T1,T2,T3>.IStructuralComparable.CompareTo Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Vergelijkt het huidige Tuple<T1,T2,T3> object met een opgegeven object met behulp van een opgegeven vergelijkingsfunctie 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
other is geen Tuple<T1,T2,T3> object.
Voorbeelden
In het volgende voorbeeld wordt een matrix gemaakt met objecten die bestaan uit de naam van Tuple<T1,T2,T3> een student, de gemiddelde testscore en het aantal tests. Het bevat het onderdeel van elke tuple in de matrix in niet-gesorteerde volgorde, sorteert de matrix en roept ToString vervolgens aan om de waarde van elke tuple in gesorteerde volgorde weer te geven. Als u de matrix wilt sorteren, definieert het voorbeeld een algemene ScoreComparer klasse die de IComparer interface implementeert en de Tuple<T1,T2,T3> objecten in oplopende volgorde sorteert op de waarde van het tweede onderdeel in plaats van het eerste onderdeel. Houd er rekening mee dat in het voorbeeld de methode niet rechtstreeks wordt aangeroepen Tuple<T1,T2,T3>.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 ScoreComparer<T1, T2, T3> : IComparer
{
public int Compare(object x, object y)
{
Tuple<T1, T2, T3> tX = x as Tuple<T1,T2, T3>;
if (tX == null)
{
return 0;
}
else
{
Tuple<T1, T2, T3> tY = y as Tuple<T1, T2, T3>;
return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2);
}
}
}
public class Example
{
public static void Main()
{
Tuple<string, double, int>[] scores =
{ Tuple.Create("Jack", 78.8, 8),
Tuple.Create("Abbey", 92.1, 9),
Tuple.Create("Dave", 88.3, 9),
Tuple.Create("Sam", 91.7, 8),
Tuple.Create("Ed", 71.2, 5),
Tuple.Create("Penelope", 82.9, 8),
Tuple.Create("Linda", 99.0, 9),
Tuple.Create("Judith", 84.3, 9) };
Console.WriteLine("The values in unsorted order:");
foreach (var score in scores)
Console.WriteLine(score.ToString());
Console.WriteLine();
Array.Sort(scores, new ScoreComparer<string, double, 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.8, 8)
// (Abbey, 92.1, 9)
// (Dave, 88.3, 9)
// (Sam, 91.7, 8)
// (Ed, 71.2, 5)
// (Penelope, 82.9, 8)
// (Linda, 99, 9)
// (Judith, 84.3, 9)
//
// The values in sorted order:
// (Ed, 71.2, 5)
// (Jack, 78.8, 8)
// (Penelope, 82.9, 8)
// (Judith, 84.3, 9)
// (Dave, 88.3, 9)
// (Sam, 91.7, 8)
// (Abbey, 92.1, 9)
// (Linda, 99, 9)
open System
open System.Collections
open System.Collections.Generic
type ScoreComparer<'T1, 'T2, 'T3>() =
interface IComparer with
member _.Compare(x: obj, y: obj) =
match x with
| :? Tuple<'T1, 'T2, 'T3> as tX ->
let tY = y :?> Tuple<'T1, 'T2, 'T3>
Comparer<'T2>.Default.Compare(tX.Item2, tY.Item2)
| _ -> 0
let scores =
[| Tuple.Create("Jack", 78.8, 8)
Tuple.Create("Abbey", 92.1, 9)
Tuple.Create("Dave", 88.3, 9)
Tuple.Create("Sam", 91.7, 8)
Tuple.Create("Ed", 71.2, 5)
Tuple.Create("Penelope", 82.9, 8)
Tuple.Create("Linda", 99.0, 9)
Tuple.Create("Judith", 84.3, 9) |]
printfn "The values in unsorted order:"
for score in scores do
printfn $"{score}"
printfn ""
Array.Sort(scores, ScoreComparer<string, double, 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.8, 8)
// (Abbey, 92.1, 9)
// (Dave, 88.3, 9)
// (Sam, 91.7, 8)
// (Ed, 71.2, 5)
// (Penelope, 82.9, 8)
// (Linda, 99, 9)
// (Judith, 84.3, 9)
//
// The values in sorted order:
// (Ed, 71.2, 5)
// (Jack, 78.8, 8)
// (Penelope, 82.9, 8)
// (Judith, 84.3, 9)
// (Dave, 88.3, 9)
// (Sam, 91.7, 8)
// (Abbey, 92.1, 9)
// (Linda, 99, 9)
Imports System.Collections
Imports System.Collections.Generic
Public Class ScoreComparer(Of T1, T2, T3) : Implements IComparer
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim tX As Tuple(Of T1, T2, T3) = TryCast(x, Tuple(Of T1, T2, T3))
If tX Is Nothing Then
Return 0
Else
Dim tY As Tuple(Of T1, T2, T3) = DirectCast(y, Tuple(Of T1, T2, T3))
Return Comparer(Of T2).Default.Compare(tx.Item2, tY.Item2)
End If
End Function
End Class
Module Example
Public Sub Main()
Dim scores() =
{ Tuple.Create("Jack", 78.8, 8),
Tuple.Create("Abbey", 92.1, 9),
Tuple.Create("Dave", 88.3, 9),
Tuple.Create("Sam", 91.7, 8),
Tuple.Create("Ed", 71.2, 5),
Tuple.Create("Penelope", 82.9, 8),
Tuple.Create("Linda", 99.0, 9),
Tuple.Create("Judith", 84.3, 9) }
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, Double, 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.8, 8)
' (Abbey, 92.1, 9)
' (Dave, 88.3, 9)
' (Sam, 91.7, 8)
' (Ed, 71.2, 5)
' (Penelope, 82.9, 8)
' (Linda, 99, 9)
' (Judith, 84.3, 9)
'
' The values in sorted order:
' (Ed, 71.2, 5)
' (Jack, 78.8, 8)
' (Penelope, 82.9, 8)
' (Judith, 84.3, 9)
' (Dave, 88.3, 9)
' (Sam, 91.7, 8)
' (Abbey, 92.1, 9)
' (Linda, 99, 9)
Opmerkingen
Dit lid is een expliciete implementatie van interfaceleden. Deze kan alleen worden gebruikt wanneer het Tuple<T1,T2,T3> exemplaar naar een IStructuralComparable interface wordt gecast.
Hoewel deze methode rechtstreeks kan worden aangeroepen, wordt deze meestal genoemd door sorteermethoden voor 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 Tuple<T1,T2,T3>.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 Tuple<T1,T2,T3>.IStructuralEquatable.Equals methode aan.