Tuple<T1>.IStructuralComparable.CompareTo(Object, IComparer) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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
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 .