Tuple<T1,T2,T3,T4>.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,T4> objekt se 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 se znaménkem, 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
není Tuple<T1,T2,T3,T4> objekt.
Příklady
Následující příklad vytvoří pole Tuple<T1,T2,T3,T4> objektů, které obsahují statistické údaje o baseballových nadhazovačích. Mezi datové položky patří název nadhazovače, počet innings pitched, průměr vytvořeného běhu nadhazujícího (průměrný počet běhů, které hráč na hru umožňuje) a počet hitů, které nadhazovač dostal. V příkladu se zobrazí komponenta každé řazené kolekce členů v poli v neseřazeném pořadí, seřadí pole a potom volání ToString zobrazí hodnotu každé kolekce členů v seřazeném pořadí. Pokud chcete pole seřadit, příklad definuje obecnou PitcherComparer
třídu, která implementuje IComparer rozhraní, a seřadí Tuple<T1,T2,T3,T4> objekty vzestupně podle hodnoty jejich třetí komponenty (vytvořeného průměru spuštění) namísto jejich první komponenty. Všimněte si, že příklad přímo nevolá metodu IStructuralComparable.CompareTo(Object, IComparer) . Tato metoda je volána implicitně metodou Array.Sort(Array, IComparer) pro každý prvek v poli.
using System;
using System.Collections;
using System.Collections.Generic;
public class PitcherComparer<T1, T2, T3, T4> : IComparer
{
public int Compare(object x, object y)
{
Tuple<T1, T2, T3, T4> tX = x as Tuple<T1, T2, T3, T4>;
if (tX == null)
{
return 0;
}
else
{
Tuple<T1, T2, T3, T4> tY = y as Tuple<T1, T2, T3, T4>;
return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3);
}
}
}
public class Example
{
public static void Main()
{
Tuple<string, double, double, int>[] pitchers =
{ Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
Tuple.Create("Lee, Adam", 137.2, 2.94, 109),
Tuple.Create("Rohr, Don", 101.0, 3.74, 110) };
Console.WriteLine("The values in unsorted order:");
foreach (var pitcher in pitchers)
Console.WriteLine(pitcher.ToString());
Console.WriteLine();
Array.Sort(pitchers, new PitcherComparer<string, double, double, int>());
Console.WriteLine("The values sorted by earned run average (component 3):");
foreach (var pitcher in pitchers)
Console.WriteLine(pitcher.ToString());
}
}
// The example displays the following output;
// The values in unsorted order:
// (McHale, Joe, 240.1, 3.6, 221)
// (Paul, Dave, 233.1, 3.24, 231)
// (Williams, Mike, 193.2, 4, 183)
// (Blair, Jack, 168.1, 3.48, 146)
// (Henry, Walt, 140.1, 1.92, 96)
// (Lee, Adam, 137.2, 2.94, 109)
// (Rohr, Don, 101, 3.74, 110)
//
// The values sorted by earned run average (component 3):
// (Henry, Walt, 140.1, 1.92, 96)
// (Lee, Adam, 137.2, 2.94, 109)
// (Rohr, Don, 101, 3.74, 110)
// (Blair, Jack, 168.1, 3.48, 146)
// (McHale, Joe, 240.1, 3.6, 221)
// (Paul, Dave, 233.1, 3.24, 231)
// (Williams, Mike, 193.2, 4, 183)
open System
open System.Collections
open System.Collections.Generic
type PitcherComparer<'T1, 'T2, 'T3, 'T4>() =
interface IComparer with
member _.Compare(x: obj, y: obj) =
match x with
| :? Tuple<'T1, 'T2, 'T3, 'T4> as tX ->
let tY = y :?> Tuple<'T1, 'T2, 'T3, 'T4>
Comparer<'T3>.Default.Compare(tX.Item3, tY.Item3)
| _ -> 0
let pitchers =
[| Tuple.Create("McHale, Joe", 240.1, 3.60, 221)
Tuple.Create("Paul, Dave", 233.1, 3.24, 231)
Tuple.Create("Williams, Mike", 193.2, 4.00, 183)
Tuple.Create("Blair, Jack", 168.1, 3.48, 146)
Tuple.Create("Henry, Walt", 140.1, 1.92, 96)
Tuple.Create("Lee, Adam", 137.2, 2.94, 109)
Tuple.Create("Rohr, Don", 101.0, 3.74, 110) |]
printfn "The values in unsorted order:"
for pitcher in pitchers do
printfn $"{pitcher}"
printfn ""
Array.Sort(pitchers, PitcherComparer<string, double, double, int>())
printfn "The values sorted by earned run average (component 3):"
for pitcher in pitchers do
printfn $"{pitcher}"
// The example displays the following output
// The values in unsorted order:
// (McHale, Joe, 240.1, 3.6, 221)
// (Paul, Dave, 233.1, 3.24, 231)
// (Williams, Mike, 193.2, 4, 183)
// (Blair, Jack, 168.1, 3.48, 146)
// (Henry, Walt, 140.1, 1.92, 96)
// (Lee, Adam, 137.2, 2.94, 109)
// (Rohr, Don, 101, 3.74, 110)
//
// The values sorted by earned run average (component 3):
// (Henry, Walt, 140.1, 1.92, 96)
// (Lee, Adam, 137.2, 2.94, 109)
// (Rohr, Don, 101, 3.74, 110)
// (Blair, Jack, 168.1, 3.48, 146)
// (McHale, Joe, 240.1, 3.6, 221)
// (Paul, Dave, 233.1, 3.24, 231)
// (Williams, Mike, 193.2, 4, 183)
Imports System.Collections
Imports System.Collections.Generic
Public Class PitcherComparer(Of T1, T2, T3, T4) : 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 T3).Default.Compare(tx.Item3, tY.Item3)
End If
End Function
End Class
Module Example
Public Sub Main()
Dim pitchers() =
{ Tuple.Create("McHale, Joe", 240.1, 3.60, 221),
Tuple.Create("Paul, Dave", 233.1, 3.24, 231),
Tuple.Create("Williams, Mike", 193.2, 4.00, 183),
Tuple.Create("Blair, Jack", 168.1, 3.48, 146),
Tuple.Create("Henry, Walt", 140.1, 1.92, 96),
Tuple.Create("Lee, Adam", 137.2, 2.94, 109),
Tuple.Create("Rohr, Don", 101.0, 3.74, 110) }
Console.WriteLine("The values in unsorted order:")
For Each pitcher In pitchers
Console.WriteLine(pitcher.ToString())
Next
Console.WriteLine()
Array.Sort(pitchers, New PitcherComparer(Of String, Double, Double, Integer)())
Console.WriteLine("The values sorted by earned run average (component 3):")
For Each pitcher In pitchers
Console.WriteLine(pitcher.ToString())
Next
End Sub
End Module
' The example displays the following output;
' The values in unsorted order:
' (McHale, Joe, 240.1, 3.6, 221)
' (Paul, Dave, 233.1, 3.24, 231)
' (Williams, Mike, 193.2, 4, 183)
' (Blair, Jack, 168.1, 3.48, 146)
' (Henry, Walt, 140.1, 1.92, 96)
' (Lee, Adam, 137.2, 2.94, 109)
' (Rohr, Don, 101, 3.74, 110)
'
' The values sorted by earned run average (component 3):
' (Henry, Walt, 140.1, 1.92, 96)
' (Lee, Adam, 137.2, 2.94, 109)
' (Rohr, Don, 101, 3.74, 110)
' (Blair, Jack, 168.1, 3.48, 146)
' (McHale, Joe, 240.1, 3.6, 221)
' (Paul, Dave, 233.1, 3.24, 231)
' (Williams, Mike, 193.2, 4, 183)
Poznámky
Tento člen je explicitní implementace členu rozhraní. Lze ho použít pouze v Tuple<T1,T2,T3,T4> případě, že je instance přetypována do IStructuralComparable rozhraní.
I když lze tuto metodu volat přímo, je nejčastěji volána metodami řazení kolekce, které zahrnují 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 IStructuralComparable.CompareTo(Object, IComparer) 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 IStructuralEquatable.Equals(Object, IEqualityComparer) .