C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でタプルの残りの要素を取得する方法|Restプロパティの使い方を解説

C#のタプル(Tuple)で8番目以降の要素を取得するには、Restプロパティを使用します。System.Tupleクラスは最大8つの要素を保持でき、Item1~Item7まではそれぞれのプロパティで直接アクセスできますが、8番目の要素だけはRestプロパティ経由で取得する仕組みになっています。

基本的な使用例

次の例では、8つの要素を持つタプルを2つ作成し、各要素へのアクセス方法とRestプロパティの動作を確認しています。

using System;

public class Demo {
   public static void Main(String[] args){
      var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, 2000);
      var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, 2000);

      Console.WriteLine("Is Tuple1 equal to Tuple2? = " + tuple1.Equals(tuple2));
      Console.WriteLine("HashCode of Tuple1 = " + tuple1.GetHashCode());
      Console.WriteLine("HashCode of Tuple2 = " + tuple2.GetHashCode());
      Console.WriteLine("Tuple1 Item 1st = " + tuple1.Item1);
      Console.WriteLine("Tuple2 Item 1st = " + tuple2.Item1);
      Console.WriteLine("Tuple1 Item 2nd = " + tuple1.Item2);
      Console.WriteLine("Tuple2 Item 2nd = " + tuple2.Item2);
      Console.WriteLine("Tuple1 Item 4th = " + tuple1.Item4);
      Console.WriteLine("Tuple2 Item 4th = " + tuple2.Item4);
      Console.WriteLine("Tuple1 Item 5th = " + tuple1.Item5);
      Console.WriteLine("Tuple2 Item 5th = " + tuple2.Item5);
      Console.WriteLine("Tuple1 Item 6th = " + tuple1.Item6);
      Console.WriteLine("Tuple2 Item 6th = " + tuple2.Item6);
      Console.WriteLine("Tuple1 Item 7th = " + tuple1.Item7);
      Console.WriteLine("Tuple2 Item 7th = " + tuple2.Item7);
      Console.WriteLine("Tuple1 rest value = " + tuple1.Rest);
      Console.WriteLine("Tuple2 rest value = " + tuple2.Rest);
   }
}

出力結果

このコードを実行すると、次のような出力が得られます。

Is Tuple1 equal to Tuple2? = True
HashCode of Tuple1 = 3247155
HashCode of Tuple2 = 3247155
Tuple1 Item 1st = 75
Tuple2 Item 1st = 75
Tuple1 Item 2nd = 200
Tuple2 Item 2nd = 200
Tuple1 Item 4th = 700
Tuple2 Item 4th = 700
Tuple1 Item 5th = 100
Tuple2 Item 5th = 100
Tuple1 Item 6th = 1200
Tuple2 Item 6th = 1200
Tuple1 Item 7th = 1500
Tuple2 Item 7th = 1500
Tuple1 rest value = (2000)
Tuple2 rest value = (2000)

両方のタプルは同じ値を持っているため、Equalsメソッドの結果はTrueとなり、ハッシュコードも一致しています。また、8番目の要素「2000」がRestプロパティから「(2000)」という形式で取得できていることがわかります。

ネストされたタプルをRestに格納する例

Restプロパティには、別のタプルを格納することもできます。次の例では、tuple1のRestに文字列と数値を含むタプルを、tuple2のRestに4つの要素を持つタプルを設定しています。

using System;

public class Demo {
   public static void Main(String[] args){
      var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, Tuple.Create("AB", 2000, "CD"));
      var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, Tuple.Create(2500, 3500, 4000, "XY"));

      Console.WriteLine("Is Tuple1 equal to Tuple2? = " + tuple1.Equals(tuple2));
      Console.WriteLine("HashCode of Tuple1 = " + tuple1.GetHashCode());
      Console.WriteLine("HashCode of Tuple2 = " + tuple2.GetHashCode());
      Console.WriteLine("Tuple1 Item 1st = " + tuple1.Item1);
      Console.WriteLine("Tuple2 Item 1st = " + tuple2.Item1);
      Console.WriteLine("Tuple1 Item 2nd = " + tuple1.Item2);
      Console.WriteLine("Tuple2 Item 2nd = " + tuple2.Item2);
      Console.WriteLine("Tuple1 Item 4th = " + tuple1.Item4);
      Console.WriteLine("Tuple2 Item 4th = " + tuple2.Item4);
      Console.WriteLine("Tuple1 Item 5th = " + tuple1.Item5);
      Console.WriteLine("Tuple2 Item 5th = " + tuple2.Item5);
      Console.WriteLine("Tuple1 Item 6th = " + tuple1.Item6);
      Console.WriteLine("Tuple2 Item 6th = " + tuple2.Item6);
      Console.WriteLine("Tuple1 Item 7th = " + tuple1.Item7);
      Console.WriteLine("Tuple2 Item 7th = " + tuple2.Item7);
      Console.WriteLine("Tuple1 rest value = " + tuple1.Rest);
      Console.WriteLine("Tuple2 rest value = " + tuple2.Rest);
   }
}

出力結果

実行すると、次の出力が得られます。

Is Tuple1 equal to Tuple2? = False
HashCode of Tuple1 = -1121878415
HashCode of Tuple2 = -835095725
Tuple1 Item 1st = 75
Tuple2 Item 1st = 75
Tuple1 Item 2nd = 200
Tuple2 Item 2nd = 200
Tuple1 Item 4th = 700
Tuple2 Item 4th = 700
Tuple1 Item 5th = 100
Tuple2 Item 5th = 100
Tuple1 Item 6th = 1200
Tuple2 Item 6th = 1200
Tuple1 Item 7th = 1500
Tuple2 Item 7th = 1500
Tuple1 rest value = ((AB, 2000, CD))
Tuple2 rest value = ((2500, 3500, 4000, XY))

今回はRestの中身が異なるため、Equalsの結果はFalseになり、ハッシュコードも異なる値となっています。Restプロパティを出力すると、ネストされたタプル全体が「((AB, 2000, CD))」のように二重の括弧で表示されます。

まとめ

  • C#のTupleクラスは最大8要素までサポートしており、8番目の要素にはRestプロパティでアクセスする
  • Restには単一の値だけでなく、別のタプルをネストして格納することも可能
  • 9個以上の要素を扱いたい場合は、Restの中にさらにタプルを入れ子にして拡張できる
  1. TkinterのListboxで選択したアイテムのインデックスを取得する方法

    TkinterのListboxウィジェットを使用すると、複数のアイテムからなるリストを簡単に作成できます。リストボックス内の各アイテムには、上から順に0から始まるインデックスが自動的に割り当てられます。この記事では、リストボックス内で選択されたアイテムのインデックスを取得して表示する方法を解説します。curselection()メソッドで現在選択中のアイテムのインデックスを取得し、get()メソッドと組み合わせることで、選択されたアイテムの情報を確認できます。実装例# 必要なライブラリをインポート from tkinter import * # tkinterフレーム(ウィンドウ)のインスタ

  2. Pythonでネストしたタプルから一意の要素を取得する方法

    ネストした(入れ子になった)タプルの中から一意の要素だけを取り出したい場合、ネストしたループとset(集合)を組み合わせるのが効果的です。 Pythonには「set」と呼ばれるデータ型が標準で用意されています。setは重複しない要素のみを保持するコレクションであり、和集合・差集合・積集合・対称差といった集合演算にも活用できます。 ここでは、setを使って重複を排除しながら要素を順番に取り出す方法を解説します。 サンプルコード my_list_1 = [(7, 8, 0), (0 ,3, 45), (3, 2, 22), (45, 12, 9)] print ("The list o