Tuple<T1,T2,T3,T4>.IStructuralComparable.CompareTo 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,T2,T3,T4> nesneyi belirtilen bir nesneyle karşılaştırır ve geçerli nesnenin sıralama düzeninde belirtilen nesneden önce mi, sonra mı yoksa belirtilen nesneyle 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 işaretli bir 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,T3,T4> değildir.
Örnekler
Aşağıdaki örnek, beyzbol atıcıları Tuple<T1,T2,T3,T4> hakkında istatistiksel veriler içeren bir nesne dizisi oluşturur. Veri öğeleri atıcının adını, atılan atıcı sayısını, atıcının kazanılan çalıştırma ortalamasını (atıcının oyun başına izin verdiği ortalama çalıştırma sayısı) ve atıcının vazgeçtiği vuruş sayısını içerir. Örnek, dizideki her tanımlama düzeninin bileşenini sıralanmamış düzende görüntüler, diziyi sıralar ve ardından her tanımlama grubunun değerini sıralanmış düzende görüntülemek için çağrılar ToString gerçekleştirir. Diziyi sıralamak için örnek, arabirimini uygulayan IComparer ve nesneleri ilk bileşenleri yerine üçüncü bileşenlerinin değerine (kazanılan çalıştırma ortalaması) göre artan düzende sıralayan Tuple<T1,T2,T3,T4> genel PitcherComparer
bir sınıf tanımlar. Örneğin doğrudan yöntemini çağırmadığını IStructuralComparable.CompareTo(Object, IComparer) 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 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)
Açıklamalar
Bu üye, açık bir arabirim üyesi uygulamasıdır. Yalnızca örnek bir IStructuralComparable arabirime Tuple<T1,T2,T3,T4> yayınlandığında kullanılabilir.
Bu yöntem doğrudan çağrılsa da, en yaygın olarak bir koleksiyonun üyelerini sıralamak için 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 alınan bir SortedList nesnenin yöntemi ve Add yöntemi tarafından Array.Sort(Array, IComparer) çağrılır.
Dikkat
IStructuralComparable.CompareTo(Object, IComparer) 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(Object, IEqualityComparer) .