C# は System.Collections.Generic に、データのグループを格納するための豊富なコレクション型を提供しています。最も一般的なものは List<T>(動的配列)、Dictionary<K,V>(キーと値のマップ)、HashSet<T>(一意の集合)です。適切なものを選択することは、明確性とパフォーマンスのために重要です。
var numbers = new List<int> { 1, 2, 3 };
numbers.Add(4); // grows dynamically
numbers[0]; // index access — O(1)
numbers.Contains(3); // O(n) search
numbers.Remove(2);
numbers.Count; // size
foreach (var n in numbers) { } // iterate
List<T> は、汎用的にいつでも使えるコレクションです。順序付き、サイズ変更可能、インデックス付きのリストです。<T> はジェネリック型パラメータ(List<string> や List<User>)で、コンパイル時の型安全性を提供します。
var ages = new Dictionary<string, int> { ["Ann"] = 30, ["Bob"] = 25 };
ages["Carol"] = 28; // add/set
ages["Ann"]; // get by key — O(1)
ages.ContainsKey("Ann");
ages.TryGetValue("Ann", out var age); // safe lookup (no exception if missing)
foreach (var (name, a) in ages) { } // iterate key-value pairs
Dictionary<K,V> はキーを値にマップし、O(1) の高速ルックアップが可能です。キャッシュ、インデックス、キーベースのアクセスに適しています。TryGetValue はキーが見つからないときに例外を避ける安全なルックアップ方法です。
var set = new HashSet<int> { 1, 2, 3 }; // unique elements, O(1) Contains
set.Add(2); // ignored (duplicate)
var queue = new Queue<int>(); // FIFO
var stack = new Stack<int>(); // LIFO
int[] arr = { 1, 2, 3 }; // fixed-size array
var ro = numbers.AsReadOnly(); // read-only wrapper
Ordered, indexed, resizable → List<T>
Key-value lookup (fast) → Dictionary<K,V>
Uniqueness / fast membership → HashSet<T>
FIFO / LIFO processing → Queue<T> / Stack<T>
Fixed size / performance-critical → array (T[])
コレクションはほぼすべてのプログラムの基本です。データのグループを格納・処理することは常時行われるため、C# の一般的なコレクション型を理解し、適切に選択することが不可欠な日常知識です。
主な型とそのユースケースを知ることが必要です。List<T> は順序付き、インデックス付き、サイズ変更可能なデータに(汎用的なワークホース)、Dictionary<K,V> は高速なキーベースのルックアップに(キャッシュ、インデックス)、HashSet<T> は一意性と高速なメンバーシップテストに、Queue/Stack は FIFO/LIFO 処理に使用します。これらは効率的で明確なコードを書くために必要です。
選択は パフォーマンス に直接影響します(例:Dictionary の O(1) ルックアップと List のスキャン O(n)、または HashSet の O(1) メンバーシップと List の O(n))。また、適切なコレクションを選択することは、すべてに List<T> を使うのではなく、意図を示すため、重要なスキルです。
これらのコレクションは ジェネリック でもあり(<T>)、コンパイル時の型安全性を提供します。
TryGetValue による安全な Dictionary ルックアップ(見つからないキーで例外を避ける)や各型のパフォーマンス特性など、実用的な詳細を知ることは、C# でデータを操作する日常的なニーズをカバーしています。
コレクションはほぼすべてのプログラムに現れ、適切な選択は意味のある形でパフォーマンスと読みやすさに影響するため、一般的なコレクション型とそれらの適切な用途を習得することは、効果的な C# 開発のための基礎的で必須の知識です。