C#で5タプル(クインタプル)を作成する方法
5タプル(クインタプル)とは
C#のTuple<T1, T2, T3, T4, T5>クラスは、5つの要素を持つタプル(クインタプル/5-tuple)を表します。タプルとは、複数の値をひとまとめにして順序付けて保持できるデータ構造であり、メソッドから複数の値を返したい場合などに便利です。ジェネリック引数T1〜T5には、それぞれ異なる型を指定できます。
このクラスには、各要素へアクセスするための5つの読み取り専用プロパティが用意されています。
- Item1 ― 現在のTuple<T1, T2, T3, T4, T5>オブジェクトの1番目の要素の値を取得します。
- Item2 ― 現在のオブジェクトの2番目の要素の値を取得します。
- Item3 ― 現在のオブジェクトの3番目の要素の値を取得します。
- Item4 ― 現在のオブジェクトの4番目の要素の値を取得します。
- Item5 ― 現在のオブジェクトの5番目の要素の値を取得します。
例1:整数型の5タプルを作成する
まずは、すべてint型の要素を持つ5タプルを作成し、各プロパティから値を取得して条件判定を行う基本的な例を見てみましょう。
using System;
public class Demo {
public static void Main(string[] args) {
Tuple<int,int,int,int,int> tuple = new Tuple<int,int,int,int,int>(100, 150, 300, 450, 600);
Console.WriteLine("Value (Item1)= " + tuple.Item1);
Console.WriteLine("Value (Item2)= " + tuple.Item2);
Console.WriteLine("Value (Item3)= " + tuple.Item3);
Console.WriteLine("Value (Item4)= " + tuple.Item4);
Console.WriteLine("Value (Item5)= " + tuple.Item5);
if (tuple.Item1 == 100) {
Console.WriteLine("Exists: Tuple Item 1 = " + tuple.Item1);
}
if (tuple.Item2 == 250) {
Console.WriteLine("Exists: Tuple Item 2 = " + tuple.Item2);
}
if (tuple.Item3 == 270) {
Console.WriteLine("Exists: Tuple Item 3 = " + tuple.Item3);
}
if (tuple.Item4 == 300) {
Console.WriteLine("Exists: Tuple Item 4 = " + tuple.Item4);
}
if (tuple.Item5 == 400) {
Console.WriteLine("Exists: Tuple Item 5 = " + tuple.Item5);
}
}
}
出力結果
上記のコードを実行すると、次のような出力が得られます。Item1だけが条件に一致したため、「Exists」メッセージは1行のみ表示されます。
Value (Item1)= 100 Value (Item2)= 150 Value (Item3)= 300 Value (Item4)= 450 Value (Item5)= 600 Exists: Tuple Item 1 = 100
例2:文字列と整数を混在させた5タプル
次に、string型とint型を混在させた5タプルの例です。このように、タプルでは各要素に異なる型を持たせることができます。
using System;
public class Demo {
public static void Main(string[] args) {
Tuple<string,int,string,int,int> tuple = new Tuple<string,int,string,int,int>("jack", 150, "pete", 300, 600);
Console.WriteLine("Value (Item1)= " + tuple.Item1);
Console.WriteLine("Value (Item2)= " + tuple.Item2);
Console.WriteLine("Value (Item3)= " + tuple.Item3);
Console.WriteLine("Value (Item4)= " + tuple.Item4);
Console.WriteLine("Value (Item5)= " + tuple.Item5);
if (tuple.Item1 == "kevin") {
Console.WriteLine("Exists: Tuple Item 1 = " + tuple.Item1);
}
if (tuple.Item2 == 250) {
Console.WriteLine("Exists: Tuple Item 2 = " + tuple.Item2);
}
if (tuple.Item3 == "pete") {
Console.WriteLine("Exists: Tuple Item 3 = " + tuple.Item3);
}
if (tuple.Item4 == 300) {
Console.WriteLine("Exists: Tuple Item 4 = " + tuple.Item4);
}
if (tuple.Item5 == 400) {
Console.WriteLine("Exists: Tuple Item 5 = " + tuple.Item5);
}
}
}
出力結果
この場合、Item3とItem4の条件が一致したため、2つの「Exists」メッセージが出力されます。
Value (Item1)= jack Value (Item2)= 150 Value (Item3)= pete Value (Item4)= 300 Value (Item5)= 600 Exists: Tuple Item 3 = pete Exists: Tuple Item 4 = 300
補足:C# 7.0以降ならValueTupleも便利
.NET Framework 4.7 / C# 7.0以降では、より軽量なValueTuple構造体とタプル構文を使用できます。要素に名前を付けられるため、Item1〜Item5よりも可読性の高いコードを書けます。
var person = (Name: "jack", Age: 150, Nickname: "pete", Score: 300, Id: 600); Console.WriteLine(person.Name); // jack Console.WriteLine(person.Score); // 300
参照型の従来のTupleクラスは不変(イミュータブル)である点に対し、ValueTupleは値型でミュータブルな要素も扱えるなど、用途に応じて使い分けるとよいでしょう。
-
Pythonで非リテラルなタプルを作成する方法を解説
はじめにPythonでは、タプルはイミュータブル(変更不可)なデータ構造であるため、リテラル以外の形で動的に作成したい場合には工夫が必要です。最もシンプルで一般的な方法は、まずリストを作成し、必要な値を変更した後、最後にタプルへ変換するという手順です。基本的な作成手順以下の手順で非リテラルなタプルを作成できます。リストを構築する(リストはミュータブルなので自由に値を変更できる)変更したい要素の値を書き換えるtuple()関数を使ってリストをタプルに変換するコード例実際のコード例を見てみましょう。def create_non_literal_tuple(a, b, c): x = [1]
-
Pythonで空のタプルを作成する方法をわかりやすく解説
Pythonでは、代入文において括弧 () の中に要素を何も書かないことで、空のタプル(tuple)オブジェクトを作成できます。また、組み込み関数 tuple() を引数なしで呼び出すことでも、空のタプルを生成することが可能です。 空のタプルを作成する2つの方法 1. 括弧 () を使う方法 最もシンプルな方法は、要素を含まない括弧をそのまま変数に代入することです。 >>> T1 = () >>> T1 () 2. tuple() 関数を使う方法 組み込み関数 tuple() に引数を渡さずに呼び出しても、同様に空のタプルが作成されます。 >>&