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

Tanım

Belirtilen bir karşılaştırıcı kullanarak geçerli Tuple<T1,T2> 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,T2> değildir.

Örnekler

Aşağıdaki örnek, öğrencinin adından Tuple<T1,T2> ve test puanından oluşan bir nesne dizisi oluşturur. Dizideki her demetin bileşenini sıralanmamış düzende görüntüler, diziyi sıralar ve sonra her tanımlama grubunun değerini sıralanmış düzende görüntülemek için çağırır ToString . Diziyi sıralamak için örnek, arabirimini uygulayan IComparer genel ScoreComparer bir sınıf tanımlar ve nesneleri ilk bileşenleri yerine ikinci bileşenlerinin değerine göre artan düzende sıralarTuple<T1,T2>. Ö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;
using System.Collections.Generic;

public class ScoreComparer<T1, T2> : IComparer
{
   public int Compare(object x, object y)
   {
      Tuple<T1, T2> tX = x as Tuple<T1,T2>;
      if (tX == null)
      { 
         return 0;
      }   
      else
      {
         Tuple<T1, T2> tY = y as Tuple<T1, T2>;
         return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2);             
      }
   }
}

public class Example
{
   public static void Main()
   {
      Tuple<string, Nullable<int>>[] scores = 
                    { new Tuple<string, Nullable<int>>("Jack", 78),
                      new Tuple<string, Nullable<int>>("Abbey", 92), 
                      new Tuple<string, Nullable<int>>("Dave", 88),
                      new Tuple<string, Nullable<int>>("Sam", 91), 
                      new Tuple<string, Nullable<int>>("Ed", null),
                      new Tuple<string, Nullable<int>>("Penelope", 82),
                      new Tuple<string, Nullable<int>>("Linda", 99),
                      new Tuple<string, Nullable<int>>("Judith", 84) };

      Console.WriteLine("The values in unsorted order:");
      foreach (var score in scores)
         Console.WriteLine(score.ToString());

      Console.WriteLine();

      Array.Sort(scores, new ScoreComparer<string, Nullable<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)
//       (Abbey, 92)
//       (Dave, 88)
//       (Sam, 91)
//       (Ed, )
//       (Penelope, 82)
//       (Linda, 99)
//       (Judith, 84)
//       
//       The values in sorted order:
//       (Ed, )
//       (Jack, 78)
//       (Penelope, 82)
//       (Judith, 84)
//       (Dave, 88)
//       (Sam, 91)
//       (Abbey, 92)
//       (Linda, 99)
open System
open System.Collections
open System.Collections.Generic

type ScoreComparer<'T1, 'T2>() =
    interface IComparer with
        member _.Compare(x: obj, y: obj) =
            match x with
            | :? Tuple<'T1, 'T2> as tX ->
                let tY = y :?> Tuple<'T1, 'T2>
                Comparer<'T2>.Default.Compare(tX.Item2, tY.Item2)             
            | _ -> 0

let scores = 
    [| Tuple<string, Nullable<int>>("Jack", 78)
       Tuple<string, Nullable<int>>("Abbey", 92) 
       Tuple<string, Nullable<int>>("Dave", 88)
       Tuple<string, Nullable<int>>("Sam", 91) 
       Tuple<string, Nullable<int>>("Ed", Nullable())
       Tuple<string, Nullable<int>>("Penelope", 82)
       Tuple<string, Nullable<int>>("Linda", 99)
       Tuple<string, Nullable<int>>("Judith", 84) |]

printfn "The values in unsorted order:"
for score in scores do
    printfn $"{score}"

printfn ""

Array.Sort(scores, ScoreComparer<string, Nullable<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)
//       (Abbey, 92)
//       (Dave, 88)
//       (Sam, 91)
//       (Ed, )
//       (Penelope, 82)
//       (Linda, 99)
//       (Judith, 84)
//       
//       The values in sorted order:
//       (Ed, )
//       (Jack, 78)
//       (Penelope, 82)
//       (Judith, 84)
//       (Dave, 88)
//       (Sam, 91)
//       (Abbey, 92)
//       (Linda, 99)
Imports System.Collections
Imports System.Collections.Generic

Public Class ScoreComparer(Of T1, T2) : Implements IComparer
   Public Function Compare(x As Object, y As Object) As Integer _
                   Implements IComparer.Compare
      Dim tX As Tuple(Of T1, T2) = TryCast(x, Tuple(Of T1, T2))
      If tX Is Nothing Then
         Return 0
      Else
         Dim tY As Tuple(Of T1, T2) = DirectCast(y, Tuple(Of T1, T2))
         Return Comparer(Of T2).Default.Compare(tx.Item2, tY.Item2)             
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim scores() As Tuple(Of String, Nullable(Of Integer)) = 
                      { New Tuple(Of String, Nullable(Of Integer))("Jack", 78),
                        New Tuple(Of String, Nullable(Of Integer))("Abbey", 92), 
                        New Tuple(Of String, Nullable(Of Integer))("Dave", 88),
                        New Tuple(Of String, Nullable(Of Integer))("Sam", 91), 
                        New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing),
                        New Tuple(Of String, Nullable(Of Integer))("Penelope", 82),
                        New Tuple(Of String, Nullable(Of Integer))("Linda", 99),
                        New Tuple(Of String, Nullable(Of Integer))("Judith", 84) }

      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, Nullable(Of 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)
'       (Abbey, 92)
'       (Dave, 88)
'       (Sam, 91)
'       (Ed, )
'       (Penelope, 82)
'       (Linda, 99)
'       (Judith, 84)
'       
'       The values in sorted order:
'       (Ed, )
'       (Jack, 78)
'       (Penelope, 82)
'       (Judith, 84)
'       (Dave, 88)
'       (Sam, 91)
'       (Abbey, 92)
'       (Linda, 99)

Açıklamalar

Bu üye, açık bir arabirim üyesi uygulamasıdır. Yalnızca örnek bir IStructuralComparable arabirime Tuple<T1,T2> yayınlandığında kullanılabilir.

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.