C# の Tuple
C# の Tuple とは
C# の Tuple (タプル) とは、複数の値の組み合わせを保持するデータ構造のことです。Tuple は () で囲って、値を指定することで作成できます。
Tuple のひとつ目の項目には Item1 という名前で、二つ目の項目には Item2 という風にアクセスできます。
次の例では ("John", 25) というタプルを変数 p として作成して、 p.Item1 として "John" という文字列に、 p.Item2 として 25 という数値にアクセスしています。
var p = ("John", 25);
Console.WriteLine($"{p.Item1} {p.Item2}");
// John 25
C# の Tuple の項目に名前を付ける
C# の Tuple の項目には名前をつけることができます。値の前にコロン : を付けてその前に項目の名前を設定します。
次の例では、タプルのひとつ目の項目に name、二つ目の項目に age という名前を付けています。
var p = (name: "John", age: 25);
Console.WriteLine($"{p.name} {p.age}");
これによって、 p.Item1 などの序数ではなく、意味のある名前で値にアクセスすることができるようになります。
C# で Tuple を返すメソッドを実装する
メソッドから Tuple として値を返すことで、呼び出し元に複数の値を返すことができます。
次の例では、メソッドの戻り値の型を (string, int) という Tuple にすることで、 呼び出し側では Tuple を受け取ることができています。
using System;
class Program
{
static void Main(string[] args)
{
var p = GetPerson();
Console.WriteLine($"{p.Item1} {p.Item2}");
}
static (string, int) GetPerson()
{
return ("John", 25);
}
}
また、Tuple の項目に名前を付ける場合には、次の例のように戻り値の宣言部分に名前を設定します。
static void Main(string[] args)
{
var p = GetPerson();
Console.WriteLine($"{p.name} {p.age}");
}
static (string name, int age) GetPerson()
{
return ("John", 25);
}
7行目で name と age という項目名を決めているために、 呼び出し側 (8行目) では名前で項目にアクセスできています。
C# の Tuple の分割代入
Tuple にまとめて設定された値を、それぞれ異なる変数にバラバラにして設定することができます。
次の例では ("John", 25) というタプルから、 name 及び age という異なる変数に値を代入しています。
var p = ("John", 25);
var (name, age) = p;
Console.WriteLine($"{name} {age}"); // John 25
このように、ひとまとまりにされていたデータ構造から、バラバラの変数に値を代入することを分割代入といいます。