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.
Geçerli koleksiyon nesnesinin önce mi, ile aynı konumda mı yoksa sıralama düzenindeki başka bir nesneyi mi takip edip etmediğini belirler.
public:
int CompareTo(System::Object ^ other, System::Collections::IComparer ^ comparer);
public int CompareTo (object other, System.Collections.IComparer comparer);
public int CompareTo (object? other, System.Collections.IComparer comparer);
abstract member CompareTo : obj * System.Collections.IComparer -> int
Public Function CompareTo (other As Object, comparer As IComparer) As Integer
Parametreler
- other
- Object
Geçerli örnekle karşılaştıracak nesne.
- comparer
- IComparer
Geçerli koleksiyon nesnesinin üyelerini öğesine karşılık gelen üyeleriyle other
karşılaştıran bir nesne.
Döndürülenler
Geçerli koleksiyon nesnesinin other
sıralama düzenindeki ile ilişkisini gösteren işaretli bir tamsayı:
- 0'dan küçükse, geçerli örnek önündedir other
.
- 0 ise, geçerli örnek ve other
eşittir.
- 0'dan büyükse, geçerli örnek öğesini izler other
.
Döndürülen değer | Açıklama |
---|---|
-1 | Geçerli örnek öncesindedir other .
|
0 | Geçerli örnek ve other eşittir.
|
1 | Geçerli örnek şu şekildedir: other .
|
Özel durumlar
Bu örnek ve other
aynı türde değildir.
Örnekler
Aşağıdaki örnek, 1960 ile 2000 arasında üç ABD şehrinin nüfus verilerini içeren bir nesne dizisi Tuple<T1,T2,T3,T4,T5,T6> oluşturur. Sextuple'ın ilk bileşeni şehir adıdır. Kalan beş bileşen, 1960 ile 2000 arasındaki on yıllık aralıklarla popülasyonu temsil eder.
sınıfı, PopulationComparer
sextuples dizisinin bileşenlerinden herhangi birine göre sıralanmasına olanak tanıyan bir IComparer uygulama sağlar. Oluşturucusunda sınıfına PopulationComparer
iki değer sağlanır: sıralama düzenini tanımlayan bileşenin konumu ve tanımlama grubu nesnelerinin artan veya azalan düzende sıralanıp sıralanmayacağını belirten bir Boolean değer.
Örnek daha sonra dizideki öğeleri sıralanmamış düzende görüntüler, üçüncü bileşene (1970'deki popülasyon) göre sıralar ve bunları görüntüler ve sonra altıncı bileşene (2000'deki popülasyon) göre sıralar ve görüntüler. Örneğin uygulamayı doğrudan çağırmadığını IStructuralComparable.CompareTo unutmayın. yöntemi, dizideki Sort(Array, IComparer) her tanımlama grubu nesnesi için yöntemi tarafından örtük olarak çağrılır.
using System;
using System.Collections;
using System.Collections.Generic;
public class PopulationComparer<T1, T2, T3, T4, T5, T6> : IComparer
{
private int itemPosition;
private int multiplier = -1;
public PopulationComparer(int component) : this(component, true)
{ }
public PopulationComparer(int component, bool descending)
{
if (! descending) multiplier = 1;
if (component <= 0 || component > 6)
throw new ArgumentException("The component argument is out of range.");
itemPosition = component;
}
public int Compare(object x, object y)
{
var tX = x as Tuple<T1, T2, T3, T4, T5, T6>;
if (tX == null)
{
return 0;
}
else
{
var tY = y as Tuple<T1, T2, T3, T4, T5, T6>;
switch (itemPosition)
{
case 1:
return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
case 2:
return Comparer<T2>.Default.Compare(tX.Item2, tY.Item2) * multiplier;
case 3:
return Comparer<T3>.Default.Compare(tX.Item3, tY.Item3) * multiplier;
case 4:
return Comparer<T4>.Default.Compare(tX.Item4, tY.Item4) * multiplier;
case 5:
return Comparer<T5>.Default.Compare(tX.Item5, tY.Item5) * multiplier;
case 6:
return Comparer<T6>.Default.Compare(tX.Item6, tY.Item6) * multiplier;
default:
return Comparer<T1>.Default.Compare(tX.Item1, tY.Item1) * multiplier;
}
}
}
}
public class Example
{
public static void Main()
{
// Create array of sextuple with population data for three U.S.
// cities, 1960-2000.
Tuple<string, int, int, int, int, int>[] cities =
{ Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) };
// Display array in unsorted order.
Console.WriteLine("In unsorted order:");
foreach (var city in cities)
Console.WriteLine(city.ToString());
Console.WriteLine();
Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(3));
// Display array in sorted order.
Console.WriteLine("Sorted by population in 1970:");
foreach (var city in cities)
Console.WriteLine(city.ToString());
Console.WriteLine();
Array.Sort(cities, new PopulationComparer<string, int, int, int, int, int>(6));
// Display array in sorted order.
Console.WriteLine("Sorted by population in 2000:");
foreach (var city in cities)
Console.WriteLine(city.ToString());
}
}
// The example displays the following output:
// In unsorted order:
// (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
// (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
// (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
//
// Sorted by population in 1970:
// (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
// (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
// (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
//
// Sorted by population in 2000:
// (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
// (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
// (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
Imports System.Collections
Imports System.Collections.Generic
Public Class PopulationComparer(Of T1, T2, T3, T4, T5, T6) : Implements IComparer
Private itemPosition As Integer
Private multiplier As Integer = -1
Public Sub New(component As Integer)
Me.New(component, True)
End Sub
Public Sub New(component As Integer, descending As Boolean)
If Not descending Then multiplier = 1
If component <= 0 Or component > 6 Then
Throw New ArgumentException("The component argument is out of range.")
End If
itemPosition = component
End Sub
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim tX = TryCast(x, Tuple(Of T1, T2, T3, T4, T5, T6))
If tX Is Nothing Then
Return 0
Else
Dim tY = DirectCast(y, Tuple(Of T1, T2, T3, T4, T5, T6))
Select Case itemPosition
Case 1
Return Comparer(Of T1).Default.Compare(tX.Item1, tY.Item1) * multiplier
Case 2
Return Comparer(Of T2).Default.Compare(tX.Item2, tY.Item2) * multiplier
Case 3
Return Comparer(Of T3).Default.Compare(tX.Item3, tY.Item3) * multiplier
Case 4
Return Comparer(Of T4).Default.Compare(tX.Item4, tY.Item4) * multiplier
Case 5
Return Comparer(Of T5).Default.Compare(tX.Item5, tY.Item5) * multiplier
Case 6
Return Comparer(Of T6).Default.Compare(tX.Item6, tY.Item6) * multiplier
' This should never happen.
Case Else
Return 0
End Select
End If
End Function
End Class
Module Example
Public Sub Main()
' Create array of sextuple with population data for three U.S.
' cities, 1960-2000.
Dim cities() =
{ Tuple.Create("Los Angeles", 2479015, 2816061, 2966850, 3485398, 3694820),
Tuple.Create("New York", 7781984, 7894862, 7071639, 7322564, 8008278),
Tuple.Create("Chicago", 3550904, 3366957, 3005072, 2783726, 2896016) }
' Display array in unsorted order.
Console.WriteLine("In unsorted order:")
For Each city In cities
Console.WriteLine(city.ToString())
Next
Console.WriteLine()
Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(3))
' Display array in sorted order.
Console.WriteLine("Sorted by population in 1970:")
For Each city In cities
Console.WriteLine(city.ToString())
Next
Console.WriteLine()
Array.Sort(cities, New PopulationComparer(Of String, Integer, Integer, Integer, Integer, Integer)(6))
' Display array in sorted order.
Console.WriteLine("Sorted by population in 2000:")
For Each city In cities
Console.WriteLine(city.ToString())
Next
End Sub
End Module
' The example displays the following output:
' In unsorted order:
' (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
' (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
' (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
'
' Sorted by population in 1970:
' (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
' (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
' (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
'
' Sorted by population in 2000:
' (New York, 7781984, 7894862, 7071639, 7322564, 8008278)
' (Los Angeles, 2479015, 2816061, 2966850, 3485398, 3694820)
' (Chicago, 3550904, 3366957, 3005072, 2783726, 2896016)
Açıklamalar
yöntemi, CompareTo dizi ve tanımlama grubu nesnelerinin özel yapısal karşılaştırmasını ve sıralamasını destekler. yöntemi, CompareTo ilk öğe veya bileşenden başlayarak tek tek dizi öğelerini veya tanımlama grubu bileşenlerini karşılaştırmak için nesnesinin IComparer.Compare yöntemini çağırırcomparer
. Tek tek bitiş çağrısı IComparer.Compare yapar CompareTo ve yöntem, aşağıdaki koşullardan biri doğru olduğunda bir değer döndürür:
IComparer.Compare yöntemi -1 döndürür.
IComparer.Compare yöntemi 1 döndürür.
yöntemi IComparer.Compare , koleksiyon nesnesindeki son öğe veya bileşen için çağrılır.