Tuple<T1>.IStructuralComparable.CompareTo(Object, IComparer) Yöntem

Tanım

Belirtilen bir karşılaştırıcı kullanarak geçerli Tuple<T1> nesneyi belirtilen bir nesneyle karşılaştırır ve geçerli nesnenin sıralama düzeninde belirtilen nesneden önce mi, sonra mı yoksa aynı konumda mı olduğunu belirten bir tamsayı döndürür.

 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

Parametreler

other
Object

Geçerli örnek ile karşılaştırılacak nesne.

comparer
IComparer

Karşılaştırma için özel kurallar sağlayan nesne.

Döndürülenler

Int32

Aşağıdaki tabloda gösterildiği gibi, bu örneğin göreli konumunu ve other sıralama düzeninde gösteren imzalı tamsayı.

Değer Açıklama
Negatif bir tamsayı Bu örnek öncesindedir other.
Sıfır Bu örnek ve other sıralama düzeninde aynı konuma sahiptir.
Pozitif bir tamsayı Bu örnek aşağıdaki gibidir other.

Uygulamalar

Özel durumlar

other nesne Tuple<T1> değildir.

Örnekler

Aşağıdaki örnek, arabirimini uygulayan IComparer<T> adlı DescendingComparer genel bir sınıfı tanımlar. DescendingComparer belirli bir tür için varsayılan karşılaştırıcı tarafından döndürülen değeri tersine döndürerek nesneleri artan düzende değil azalan düzende sıralar. Daha sonra bir nesne dizisini azalan düzende sıralamak Array.Sort(Array, IComparer) için genel DescendingComparer sınıfın Tuple<T1> bir örneği yöntemine geçirilir. Örneğin yöntemini doğrudan çağırmadığını IStructuralComparable.CompareTo unutmayın. Bu yöntem, dizideki Array.Sort(Array, IComparer) her öğe için yöntemi tarafından örtük olarak çağrılır.

using System;
using System.Collections.Generic;

public class DescendingComparer<T> : IComparer<T>
{
    public int Compare(T x, T y) 
    {
        return -1 * Comparer<T>.Default.Compare(x, y);
    }
}

class CompareTo2
{
   static void Main()
   {
       Tuple<Double>[] values = { Tuple.Create(13.54),
                                  Tuple.Create(Double.NaN),
                                  Tuple.Create(-189.42993),
                                  Tuple.Create(Double.PositiveInfinity),
                                  Tuple.Create(Double.Epsilon),
                                  Tuple.Create(1.934E-17),
                                  Tuple.Create(Double.NegativeInfinity),
                                  Tuple.Create(-0.000000000003588),
                                  null };
       Console.WriteLine("The values in unsorted order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
       Console.WriteLine();

       Array.Sort(values, new DescendingComparer<Tuple<Double>>());

       Console.WriteLine("The values sorted in descending order:");
       foreach (var value in values)
           if (value != null)
               Console.WriteLine("   {0}", value.Item1);
           else
               Console.WriteLine("   <null>");
    }
}
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN
open System
open System.Collections.Generic

type DescendingComparer<'T>() =
    interface IComparer<'T> with
        member _.Compare(x: 'T, y: 'T) = 
            -1 * Comparer<'T>.Default.Compare(x, y)

let values = 
    [| Tuple.Create 13.54
       Tuple.Create Double.NaN
       Tuple.Create -189.42993
       Tuple.Create Double.PositiveInfinity
       Tuple.Create Double.Epsilon
       Tuple.Create 1.934E-17
       Tuple.Create Double.NegativeInfinity
       Tuple.Create -0.000000000003588
       null |]
printfn "The values in unsorted order:"
for value in values do
    printfn $"   %A{value.Item1}"
printfn ""

Array.Sort(values, DescendingComparer<Tuple<Double>>())

printfn "The values sorted in descending order:"
for value in values do
    printfn $"   %A{value.Item1}"
// The example displays the following output:
//      The values in unsorted order:
//         13.54
//         NaN
//         -189.42993
//         Infinity
//         4.94065645841247E-324
//         1.934E-17
//         -Infinity
//         -3.588E-12
//
//      The values sorted in descending order:
//         Infinity
//         13.54
//         1.934E-17
//         4.94065645841247E-324
//         -3.588E-12
//         -189.42993
//         -Infinity
//         NaN
Imports System.Collections.Generic

Public Class DescendingComparer(Of T) : Implements IComparer(Of T)
    Public Function Compare(ByVal x As T, ByVal y As T) As Integer Implements IComparer(Of T).Compare
        Return -1 * Comparer(Of T).Default.Compare(x, y)
    End Function
End Class

Module Example
    Sub Main()
        Dim values() = { Tuple.Create(13.54),
                         Tuple.Create(Double.NaN),
                         Tuple.Create(-189.42993),
                         Tuple.Create(Double.PositiveInfinity),
                         Tuple.Create(Double.Epsilon),
                         Tuple.Create(1.934E-17),
                         Tuple.Create(Double.NegativeInfinity),
                         Tuple.Create(-0.000000000003588),
                         Nothing}

        Console.WriteLine("The values in unsorted order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
        Console.WriteLine()

        Array.Sort(values, New DescendingComparer(Of Tuple(Of Double)))

        Console.WriteLine("The values sorted in descending order:")
        For Each value As Tuple(Of Double) In values
            If value IsNot Nothing Then
                Console.WriteLine("   {0}", value.Item1)
            Else
                Console.WriteLine("   <null>")
            End If
        Next
    End Sub
End Module
' The example displays the following output:
'      The values in unsorted order:
'         13.54
'         NaN
'         -189.42993
'         Infinity
'         4.94065645841247E-324
'         1.934E-17
'         -Infinity
'         -3.588E-12
'
'      The values sorted in descending order:
'         Infinity
'         13.54
'         1.934E-17
'         4.94065645841247E-324
'         -3.588E-12
'         -189.42993
'         -Infinity
'         NaN

Açıklamalar

Bu yöntem doğrudan çağrılabilse de, en yaygın olarak bir koleksiyonun üyelerini sıralamaya yönelik parametreleri içeren IComparer koleksiyon sıralama yöntemleri tarafından çağrılır. Örneğin, oluşturucu kullanılarak SortedList.SortedList(IComparer) örneği oluşturan bir SortedList nesnenin yöntemi ve Add yöntemi tarafından Array.Sort(Array, IComparer) çağrılır.

Dikkat

IStructuralComparable.CompareTo yöntemi, sıralama işlemlerinde kullanılmak üzere tasarlanmıştır. Karşılaştırmanın asıl amacı iki nesnenin eşit olup olmadığını belirlemek olduğunda kullanılmamalıdır. İki nesnenin eşit olup olmadığını belirlemek için yöntemini çağırın IStructuralEquatable.Equals .

Şunlara uygulanır

Ayrıca bkz.