C#でタプルを使うのはどんなとき?活用シーンとサンプルコードを解説
C#におけるタプル(Tuple)は、主に以下のような場面で活用されるデータ構造です。
- ref や out パラメータを使わずに、メソッドから複数の値を返したいとき
- 1つのパラメータだけで、複数の値をメソッドへ渡したいとき
さらに、タプルは入れ子(ネスト)にすることもできるため、柔軟なデータのまとまりとして扱えるのが特徴です。ここでは、代表的な2つの使い方をサンプルコードとともに紹介します。
例1:タプルを引数として渡す
タプルを1つの引数として渡すことで、複数の値をまとめてメソッドに受け渡せます。
class Program{
static void DisplayTupleValues(Tuple<int, string, string> dummy){
Console.WriteLine($"Id = { dummy.Item1}");
Console.WriteLine($"Value1 = { dummy.Item2}");
Console.WriteLine($"Value2 = { dummy.Item3}");
}
static void Main(){
var dummy = Tuple.Create(1, "Dummy", "Tuple");
DisplayTupleValues(dummy);
Console.ReadLine();
}
}実行結果
Id = 1 Value1 = Dummy Value2 = Tuple
例2:戻り値としてタプルを使用する
メソッドの戻り値の型をタプルにすれば、out パラメータに頼らずに複数の値を呼び出し元へ返せます。
class Program{
static Tuple<int, string, string> ReturnTuple(){
return Tuple.Create(1, "Value1", "Value2");
}
static void Main(){
var returnValues = ReturnTuple();
System.Console.WriteLine($"{returnValues.Item1} {returnValues.Item2} {returnValues.Item3}");
Console.ReadLine();
}
}実行結果
1 Value1 Value2
補足:C# 7.0以降なら「ValueTuple」も便利
C# 7.0 以降では、より軽量なValueTupleが利用できます。要素に名前を付けられるため、「Item1」「Item2」といった番号ではなく、意味のある名前で値にアクセスできる点が大きなメリットです。
static (int Id, string Name) GetPerson()
=> (1, "Taro");
var person = GetPerson();
Console.WriteLine(person.Id); // 1
Console.WriteLine(person.Name); // Taroこのように、タプルを使いこなすことで、複数の値のやり取りを簡潔かつ安全に記述できます。
-
ExcelでVLOOKUPの代わりにINDEX-MATCHを使うべき理由と具体的な使い方
Excelを日常的に使っている方なら、VLOOKUP関数はすでにお馴染みでしょう。VLOOKUPは、同じ行内の一致するテキストをもとに、別のセルから値を検索して取得できる非常に便利な関数です。 まだVLOOKUPに慣れていないという方は、まず基本的な使い方を解説した入門記事を確認しておくと理解がスムーズになります。 しかし、VLOOKUPは強力な反面、参照元の表の構造に制約があるという大きな弱点を抱えています。本記事では、VLOOKUPでは対応できないケースを具体例とともに紹介し、その問題を解決できるINDEX-MATCH関数の使い方を詳しく解説します。 INDEX-MATCHの実例:車のデ
-
【Java入門】Jacksonの@JsonValueアノテーションの使い方と使うべきタイミング
JavaでオブジェクトをJSONに変換する際、Jacksonの@JsonValueアノテーションは非常に便利な機能です。このアノテーションは主にメソッドレベルで使用され、JavaオブジェクトからJSON文字列を生成する方法を自由に定義できます。通常、シリアライズされたオブジェクトの内容を出力したい場合はtoString()メソッドをオーバーライドします。しかし、@JsonValueアノテーションを使えば、toString()とは独立して、そのオブジェクトがどのような形式でJSONへシリアライズされるかを明示的に制御することが可能になります。@JsonValueアノテーションの構文@Target