本文へスキップ
BecomeCoder

C#文法コース · 第3章 コレクション · レッスン28

コレクションの選び方

ブラウザで完結

導入

配列・List・Dictionary・HashSet、そして順番付きのQueue・Stack——たくさんの入れ物を学びました。実務では「どれを使うか」を状況で選びます。まずは最頻出の4つの判断基準を整理しましょう。

図解

flowchart TB
    Q1{"キーで値を引きたい?"} -->|はい| DIC["Dictionary"]
    Q1 -->|いいえ| Q2{"重複を除きたい / 含有判定が主?"}
    Q2 -->|はい| HS["HashSet"]
    Q2 -->|いいえ| Q3{"個数が増減する?"}
    Q3 -->|はい| LIST["List"]
    Q3 -->|いいえ・固定長| ARR["配列"]
    style DIC fill:#e1f5fe
    style HS fill:#e8f5e9
    style LIST fill:#fff3e0

サンプル

// それぞれの得意分野を1つの例で対比
int[] fixedScores = { 80, 90, 70 };            // 固定長 → 配列
List<string> todo = new() { "A", "B" };        // 増減する → List
Dictionary<string, int> price = new() { ["ペン"] = 100 };  // キーで引く → Dictionary
HashSet<string> seen = new() { "x", "y" };     // 重複なし → HashSet

Console.WriteLine(fixedScores.Length);   // 3
Console.WriteLine(todo.Count);           // 2
Console.WriteLine(price["ペン"]);         // 100
Console.WriteLine(seen.Contains("x"));   // True
  • 配列: 個数が固定。最も軽量
  • List: 個数が増減する。最頻出
  • Dictionary: キーから値を引く
  • HashSet: 重複を許さない・含有判定が高速
  • どれも{ ... }コレクション初期化子でまとめて初期値を入れられる

演習

// 「同じ単語が何回出たかを数える」にはどのコレクションが最適か——Dictionaryです。
string[] words = { "cat", "dog", "cat", "cat", "dog" };
Dictionary<string, int> counts = new();

// TODO: 各単語の出現回数を数え、"cat: 3" の形式で cat の回数を出力してください
//       ヒント: 未登録なら0、あれば+1
___
  • 期待される出力: cat: 3
ヒント1を見る

foreachで回し、counts.TryGetValue(w, out int c)cに+1してcounts[w] = c + 1;

ヒント2を見る

foreach (var w in words) { counts.TryGetValue(w, out int c); counts[w] = c + 1; } Console.WriteLine($"cat: {counts["cat"]}");

まとめ

  • 固定長=配列、増減=List、キー引き=Dictionary、重複なし=HashSet
  • 取り出す順番にルールが要るなら Queue(先入れ先出し)/ Stack(後入れ先出し)
  • 迷ったらListが基本、キーが要るならDictionary
  • { ... }のコレクション初期化子で初期値をまとめて入れられる

次章: 処理に名前を付けて再利用する「メソッド」へ進みます。

実際に動かしてみよう

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

C# — ブラウザ内で実行

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