導入
「わざわざクラスを作るほどでもないが、2〜3個の値をまとめて返したい」——そんなときタプルが便利です。受け取る側で個々の変数に分解できます。
図解
flowchart LR
M["MinMax()"] --> T["(min: 1, max: 9)<br/>タプルで2値を返す"]
T --> D["var (lo, hi) = ...<br/>分解して受け取る"]
サンプル
// 複数の値をまとめて返す(戻り値の型は (int, int) 相当)
var result = MinMax(new[] { 3, 1, 9, 4 });
Console.WriteLine($"最小{result.min} 最大{result.max}"); // 最小1 最大9
// 分解代入: 個々の変数に一度に受け取れる
var (lo, hi) = MinMax(new[] { 5, 2, 8 });
Console.WriteLine($"{lo}〜{hi}"); // 2〜8
// 名前付きタプルを返すローカル関数
(int min, int max) MinMax(int[] nums)
{
return (nums.Min(), nums.Max());
}
(値, 値)で複数の値を1つにまとめる=タプル(int min, int max)のように名前付きにすると.min/.maxで読めるvar (a, b) = ...で個々の変数に分解して受け取れる
演習
var (sum, count) = Analyze(new[] { 10, 20, 30 });
Console.WriteLine($"合計{sum} 件数{count}"); // 合計60 件数3
// TODO: 配列を受け取り、(合計, 件数) の名前付きタプルを返す Analyze を定義してください
___
- 期待される出力:
合計60 件数3
ヒント1を見る
(int sum, int count) Analyze(int[] a) => (a.Sum(), a.Length);
ヒント2を見る
使用コードの後ろに(int sum, int count) Analyze(int[] a) => (a.Sum(), a.Length);を書きます
まとめ
- タプル
(値, 値)で複数の値を手軽にまとめる - 名前付きにすると読みやすい
var (a, b) = ...で分解して受け取れる
次回: コードに情報を付ける「属性」と、それを実行時に読む「リフレクション」です。