Tuple<T1>.IStructuralComparable.CompareTo(Object, IComparer) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
透過指定的比較器將當前 Tuple<T1> 物件與指定物件比較,並回傳一個整數,表示目前物件在排序順序中是位於指定物件之前、之後或相同位置。
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
參數
- other
- Object
一個可以與當前實例比較的物件。
- comparer
- IComparer
一個提供自訂比較規則的物件。
傳回
一個帶符號整數,表示此實例的相對位置及其 other 排序順序,如下表所示。
| 價值 | 描述 |
|---|---|
| 一個負整數 | 此實例發生 other於 之前。
|
| 零 | 這個實例和 other 在排序順序中的位置相同。
|
| 一個正整數 | 此實例可得 other。
|
實作
例外狀況
other 不是 Tuple<T1> 物件。
範例
以下範例定義了一個名為 DescendingComparer 的通用類別,該類別實作了該 IComparer<T> 介面。
DescendingComparer 透過反向預設比較器回傳的值來將物件排序為降序而非升序。 接著將泛型 DescendingComparer 類別的一個實例傳給 Array.Sort(Array, IComparer) 該方法,以排序物件陣列 Tuple<T1> 。 請注意,範例中並未直接呼叫該 IStructuralComparable.CompareTo 方法。 此方法由 方法 Array.Sort(Array, IComparer) 隱含呼叫,針對陣列中的每個元素。
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
備註
雖然此方法可直接呼叫,但最常見的是集合排序方法,包含 IComparer 參數來排序集合成員。 例如,它由Array.Sort(Array, IComparer)使用Add建構子實例化的物件的方法和SortedList方法SortedList.SortedList(IComparer)所呼叫。
注意事項
此 IStructuralComparable.CompareTo 方法主要用於排序操作。 當比較的主要目的是判斷兩個物體是否相等時,不應使用此方法。 要判斷兩個物體是否相等,請呼叫該 IStructuralEquatable.Equals 方法。