Tuple<T1,T2,T3,T4>.IStructuralComparable.CompareTo Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Jämför det aktuella Tuple<T1,T2,T3,T4> objektet med ett angivet objekt med en angiven jämförelse och returnerar ett heltal som anger om det aktuella objektet är före, efter eller i samma position som det angivna objektet i sorteringsordningen.
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
Parametrar
- other
- Object
Ett objekt som ska jämföras med den aktuella instansen.
- comparer
- IComparer
Ett objekt som tillhandahåller anpassade regler för jämförelse.
Returer
Ett signerat heltal som anger den relativa positionen för den här instansen och other i sorteringsordningen, enligt följande tabell.
| Värde | Beskrivning |
|---|---|
| Ett negativt heltal | Den här instansen föregår other.
|
| Noll | Den här instansen och other har samma position i sorteringsordningen.
|
| Ett positivt heltal | Den här instansen följer other.
|
Implementeringar
Undantag
other är inte ett Tuple<T1,T2,T3,T4> objekt.
Exempel
I följande exempel skapas en matris med Tuple<T1,T2,T3,T4> objekt som innehåller statistiska data om basebollkastare. Dataobjekten inkluderar namnet på kastaren, antalet innings som kastas, kastarens intjänade körningsmedelvärde (det genomsnittliga antalet körningar som en kastare tillåter per match) och antalet träffar som kastaren har gett upp. Exemplet visar komponenten för varje tuppeln i matrisen i osorterad ordning, sorterar matrisen och anropar ToString sedan för att visa värdet för varje tuppeln i sorterad ordning. För att sortera matrisen definierar exemplet en allmän PitcherComparer klass som implementerar gränssnittet och sorterar IComparer objekten Tuple<T1,T2,T3,T4> i stigande ordning efter värdet för deras tredje komponent (det intjänade körningsgenomsnittet) i stället för deras första komponent. Observera att exemplet inte anropar IStructuralComparable.CompareTo(Object, IComparer) metoden direkt. Den här metoden anropas implicit av Array.Sort(Array, IComparer) metoden för varje element i matrisen.
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)
Kommentarer
Den här medlemmen är en explicit implementering av gränssnittsmedlemmar. Den kan endast användas när instansen Tuple<T1,T2,T3,T4> skickas till ett IStructuralComparable gränssnitt.
Även om den här metoden kan anropas direkt kallas den oftast av insamlingssorteringsmetoder som innehåller IComparer parametrar för att beställa medlemmarna i en samling. Den anropas till exempel av Array.Sort(Array, IComparer) metoden och Add metoden för ett SortedList objekt som instansieras med hjälp SortedList.SortedList(IComparer) av konstruktorn.
Caution
Metoden IStructuralComparable.CompareTo(Object, IComparer) är avsedd att användas i sorteringsåtgärder. Den bör inte användas när det primära syftet med en jämförelse är att avgöra om två objekt är lika med. Om du vill avgöra om två objekt är lika med anropar du IStructuralEquatable.Equals(Object, IEqualityComparer) metoden.