Tuple<T1,T2,T3>.IStructuralComparable.CompareTo Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Porovná aktuální Tuple<T1,T2,T3> objekt s zadaným objektem pomocí zadaného porovnávače a vrátí celé číslo, které označuje, zda je aktuální objekt před, za nebo ve stejné pozici jako zadaný objekt v pořadí řazení.
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
Parametry
- other
- Object
Objekt k porovnání s aktuální instancí.
- comparer
- IComparer
Objekt, který poskytuje vlastní pravidla pro porovnání.
Návraty
Celé číslo, které označuje relativní pozici této instance a other
v pořadí řazení, jak je znázorněno v následující tabulce.
Hodnota | Popis |
---|---|
Záporné celé číslo | Tato instance předchází other .
|
Žádnou | Tato instance a other má stejnou pozici v pořadí řazení.
|
Kladné celé číslo | Tato instance následuje other .
|
Implementuje
Výjimky
other
Tuple<T1,T2,T3> není objekt.
Příklady
Následující příklad vytvoří pole Tuple<T1,T2,T3> objektů, které se skládají z názvu studenta, střední skóre testu a počtu testů. Zobrazí komponentu jednotlivých řazených kolekcí členů v poli v neseřazeném pořadí, seřadí matici a pak volání ToString zobrazí hodnotu jednotlivých řazených kolekcí členů v seřazených pořadích. Pokud chcete pole seřadit, příklad definuje obecnou ScoreComparer
třídu, která implementuje IComparer rozhraní a seřadí Tuple<T1,T2,T3> objekty vzestupně podle hodnoty jejich druhé komponenty, a nikoli podle jejich první komponenty. Všimněte si, že příklad přímo nevolá metodu Tuple<T1,T2,T3>.IStructuralComparable.CompareTo . Tato metoda se implicitně nazývá metodou Array.Sort(Array, IComparer) pro každý prvek v poli.
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)
Poznámky
Tento člen je explicitní implementace členu rozhraní. Lze ho Tuple<T1,T2,T3> použít pouze v případě, že je instance přetypována do IStructuralComparable rozhraní.
I když lze tuto metodu volat přímo, nejčastěji se nazývá metoda řazení kolekce, které obsahují IComparer parametry pro pořadí členů kolekce. Volá se například metodou Array.Sort(Array, IComparer) a Add metodou SortedList objektu, která je vytvořena pomocí konstruktoru SortedList.SortedList(IComparer) .
Upozornění
Metoda Tuple<T1,T2,T3>.IStructuralComparable.CompareTo je určena k použití v operacích řazení. Není vhodné jej používat, pokud je primárním účelem porovnání zjištění, zda se dva objekty rovnají. Chcete-li zjistit, zda jsou dva objekty stejné, zavolejte metodu Tuple<T1,T2,T3>.IStructuralEquatable.Equals .