英語で読む

次の方法で共有


Tuple<T1,T2,T3,T4>.IStructuralComparable.CompareTo メソッド

定義

指定された比較子を使用して現在の Tuple<T1,T2,T3,T4> オブジェクトと指定されたオブジェクトを比較し、並べ替え順序において、現在のオブジェクトの位置が指定されたオブジェクトの前になるか、後ろになるか、同じになるかを示す整数を返します。

C#
int IStructuralComparable.CompareTo(object other, System.Collections.IComparer comparer);

パラメーター

other
Object

現在のインスタンスと比較するオブジェクト。

comparer
IComparer

比較用のカスタムの規則を提供するオブジェクト。

戻り値

並べ替え順序における、このインスタンスと other の相対位置を示す符号付き整数値 (次の表を参照)。

説明
負の整数 このインスタンスの位置が other よりも前です。
ゼロ このインスタンスと other の位置は、並べ替え順序において同じです。
正の整数 このインスタンスの位置が other よりも後ろです。

実装

例外

otherTuple<T1,T2,T3,T4> オブジェクトではありません。

次の例では、野球投手に関する統計データを含むオブジェクトの Tuple<T1,T2,T3,T4> 配列を作成します。 データ項目には、投手の名前、投球回数、投手の獲得したラン平均 (1 試合あたりの投手の平均実行回数)、投手が与えたヒット数が含まれます。 この例では、配列内の各タプルのコンポーネントを並べ替えられていない順序で表示し、配列を並べ替え、 を呼び出 ToString して各タプルの値を並べ替えられた順序で表示します。 配列を並べ替えるには、インターフェイスを実装するジェネリック PitcherComparer クラスを IComparer 定義し、オブジェクトを Tuple<T1,T2,T3,T4> 最初のコンポーネントではなく、3 番目のコンポーネント (達成された実行平均) の値で昇順に並べ替えます。 この例では、 メソッドは直接呼び出されないことに IStructuralComparable.CompareTo(Object, IComparer) 注意してください。 このメソッドは、配列内の各要素の Array.Sort(Array, IComparer) メソッドによって暗黙的に呼び出されます。

C#
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)

注釈

このメンバーは、明示的なインターフェイス メンバーの実装です。 これは、Tuple<T1,T2,T3,T4> のインスタンスが IStructuralComparable インターフェイスにキャストされる場合のみ、使用できます。

このメソッドは直接呼び出すことができますが、最も一般的には、コレクションのメンバーを並べ替えるためのパラメーターを含む IComparer コレクション並べ替えメソッドによって呼び出されます。 たとえば、コンストラクターをArray.Sort(Array, IComparer)使用SortedList.SortedList(IComparer)してインスタンス化される オブジェクトの SortedList メソッドと Add メソッドによって呼び出されます。

注意事項

メソッドは IStructuralComparable.CompareTo(Object, IComparer) 、並べ替え操作で使用することを目的としています。 比較の主な目的は、2 つのオブジェクトが等しいかどうかを判断する場合には使用しないでください。 2 つのオブジェクトが等しいかどうかを判断するには、 メソッドを呼び出します IStructuralEquatable.Equals(Object, IEqualityComparer)

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0