導入
配列・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
{ ... }のコレクション初期化子で初期値をまとめて入れられる
次章: 処理に名前を付けて再利用する「メソッド」へ進みます。