Tuple は C# 7 から使用できるデーや型で、複数の値を含む関数値を返す時などに使用できる。
Python のタプルと似ているが、次のような違いがある。
- 要素の型付けが必要。ただし、型推論ができるので型付けの明示はしなくてもよい。
- 要素の変更が可能
- それぞれの要素に名前を付けることができる。例 (a:int, b:string)
- メタデータはサポートされない。
- 分解構文で要素を簡単に取り出せる。
- Python では要素を配列要素のように [] で扱えるが、C# では Item1, Item2, … という変数を使う。
次に Tuple の使用例を示す。
// Tuple
// 整数のペアを表す Tuple
using IntPair = (int, int);
var println = (Object o) => Console.WriteLine(o.ToString());
// 乱数を初期化
var rand = new Random();
// 整数乱数ペアを生成する関数
var getRandomPair = IntPair () => ((int)rand.NextInt64((long)Int32.MaxValue), (int)rand.NextInt64((long)Int32.MaxValue));
println("Tutple");
// Tuple の要素は [] でアクセスできない。その代わり Item1, Item2, ... でアクセスする。
// Item128 まであるが、可読性が悪くなるので、要素に名前を付けるほうが現実的である。
for (int i = 0; i < 5; i++)
{
IntPair p = getRandomPair();
println($"{p.Item1}, {p.Item2}");
}
// Tuple の要素は [] でアクセスできない。 次のように要素に名前を付けてアクセスすることもできる。
for (int i = 0; i < 5; i++)
{
var (first, last) = getRandomPair();
println($"{first}, {last}");
}