C# 7以降では、タプル(Tuple)と呼ばれる新しいデータ構造が導入されました。タプルは、関連するデータをグループ化して取り扱うための便利な手段です。この記事では、C#のタプルの基本的な使い方について解説します。
タプルの概要
タプルは複数の値をひとまとめにして扱うことができます。通常の変数が1つの値を保持するのに対して、タプルは複数の値を保持することができます。タプルはイミュータブル(変更不可)であり、値の順序に意味があるため、順序を保持したままアクセスすることができます。
タプルの作成
C#でタプルを作成するには、次のような構文を使用します。
(var1, var2, ..., varN) = (value1, value2, ..., valueN);
この構文では、変数(var1、var2、...、varN)にタプルの各要素が順番に代入されます。値(value1、value2、...、valueN)は、カンマで区切られた値のリストです。
以下の例を見てみましょう。
(string, int) person = ("John Doe", 30);
上記の例では、personという変数がタプルとして宣言され、("John Doe", 30)というタプルの値が代入されています。この場合、personは文字列と整数の2つの要素を持つタプルです。
また、タプルの要素には個別に名前をつけることもできます。名前をつけることで、後で値を参照する際にわかりやすくなります。
(string Name, int Age) person = ("John Doe", 30);
上記の例では、タプルの要素にNameとAgeという名前を付けています。
タプルの要素へのアクセス
タプルの要素には、ドット演算子を使用してアクセスすることができます。要素の位置に基づいてアクセスする場合は、0から始まるインデックスを使用します。
var name = person.Item1; // インデックスを指定して要素にアクセス
var age = person.Item2;
また、要素に名前が付けられている場合は、名前を使用して直接アクセスすることもできます。
var name = person.Name; // 名前を使用して要素にアクセス
var age = person.Age;
タプルの分解
タプルの要素を個別の変数に分解することもできます。分解するには、以下のような構文を使用します。
(var1, var2, ..., varN) = tuple;
以下の例を見てみましょう。
(string name, int age) = person;
上記の例では、personというタプルをnameとageという個別の変数に分解しています。この場合、name変数にはタプルの最初の要素が代入され、age変数にはタプルの2番目の要素が代入されます。
タプルの返り値
メソッドや関数が複数の値を返す必要がある場合、タプルを使用することができます。
(string, int) GetPerson()
{
// ...
return ("John Doe", 30);
}
上記の例では、GetPersonメソッドが文字列と整数の2つの値を返すためにタプルを使用しています。メソッドの呼び出し側では、返り値を分解して個別の変数に代入することもできます。
(string name, int age) = GetPerson();
上記の例では、GetPersonメソッドの返り値をnameとageという変数に分解しています。
タプルの比較
タプルは要素ごとの比較が可能です。要素ごとに比較され、順番に等しいかどうかが判断されます。
var person1 = ("John Doe", 30);
var person2 = ("Jane Smith", 25);
if (person1 == person2)
{
// 両者が等しい場合の処理
}
else
{
// 両者が異なる場合の処理
}
上記の例では、person1とperson2の要素が比較され、両者が異なるため、elseブロックが実行されます。
まとめ
C#のタプルは、複数の値をひとまとめにして扱うための便利な機能です。タプルを使用することで、関連するデータを簡潔に表現できます。タプルの要素には名前を付けることもでき、値の分解や比較も容易に行うことができます。タプルはメソッドの返り値として使用することもでき、関数やメソッドが複数の値を返す場合に役立ちます。
タプルはC# 7以降で導入された機能であり、コードの可読性や保守性を向上させるために積極的に活用することをおすすめします。