Tuple<T1,T2,T3,T4>.IStructuralComparable.CompareTo Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сравнивает текущий объект Tuple<T1,T2,T3,T4> с указанным объектом, используя заданный компаратор, и возвращает целое число, которое показывает положение текущего объекта относительно указанного объекта в порядке сортировки: перед объектом, после него или в той же позиции.
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
Параметры
- other
- Object
Объект для сравнения с текущим экземпляром.
- comparer
- IComparer
Объект, предоставляющий настраиваемые правила для сравнения.
Возвращаемое значение
Целое число со знаком, определяющее относительное положение экземпляра и параметра other
в порядке сортировки, как показано в следующей таблице.
Значение | Описание |
---|---|
Отрицательное целое число | Данный экземпляр предшествует параметру other .
|
Нуль | У этого экземпляра та же позиция в порядке сортировки, что и у other .
|
Положительное целое число | Данный экземпляр стоит после параметра other .
|
Реализации
Исключения
other
не является объектом Tuple<T1,T2,T3,T4>.
Примеры
В следующем примере создается массив Tuple<T1,T2,T3,T4> объектов, содержащих статистические данные о бейсбольных кувшинах. Элементы данных включают имя кувшина, количество подач разбил, заработанный кувшин средний запуск (среднее количество запусков кувшин позволяет за игру) и количество попаданий кувшин отказался от кувшина. В примере компонент каждого кортежа в массиве отображается в несортированном порядке, выполняется сортировка массива, а затем вызывается для ToString отображения значения каждого кортежа в отсортированного порядке. Для сортировки массива в примере определяется универсальный PitcherComparer
класс, который реализует IComparer интерфейс и сортирует Tuple<T1,T2,T3,T4> объекты в порядке возрастания по значению их третьего компонента (среднее время выполнения), а не по первому компоненту. Обратите внимание, что в примере метод не вызывается IStructuralComparable.CompareTo(Object, IComparer) напрямую. Этот метод вызывается неявно методом Array.Sort(Array, IComparer) для каждого элемента в массиве.
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)
Комментарии
Этот член представляет собой явную реализацию члена интерфейса. Он может использоваться, только если экземпляр Tuple<T1,T2,T3,T4> приведен к типу интерфейса IStructuralComparable.
Хотя этот метод можно вызывать напрямую, он чаще всего вызывается методами сортировки коллекций, которые включают IComparer параметры для упорядочения членов коллекции. Например, он вызывается методом и методом SortedList объекта, экземпляр которого создается с помощью конструктора SortedList.SortedList(IComparer) .AddArray.Sort(Array, IComparer)
Внимание!
Метод IStructuralComparable.CompareTo(Object, IComparer) предназначен для использования в операциях сортировки. Его не следует использовать, если основная цель сравнения заключается в том, чтобы определить, равны ли два объекта. Чтобы определить, равны ли два объекта, вызовите IStructuralEquatable.Equals(Object, IEqualityComparer) метод .