本文へスキップ
BecomeCoder

C#オブジェクト指向コース · 第2章 型を表現する · レッスン18

タプルと分解

ブラウザで完結

導入

「わざわざクラスを作るほどでもないが、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) = ...で分解して受け取れる

次回: コードに情報を付ける「属性」と、それを実行時に読む「リフレクション」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。