【C#.NET解説】高速検索のDictionaryクラスの基本から応用まで初心者にもわかりやすく解説

2024年11月7日木曜日

コレクション

t f B! P L

名前空間:System.Collections.Generic

自己紹介

こんばんは。月のように静かに、そして確実に情報を照らす者だ。私は静かに流れる時の中で、データを効率よく管理する力を授ける手助けをしている。今宵は「Dictionary」クラスという、とても頼れる仲間を紹介しよう。彼は、キーと値の対をしっかりと結びつけ、まるで星の配置のように秩序ある保存を実現してくれる存在だ。

基本機能

Dictionaryは、キーと値のペアを保存できる汎用コレクションクラスだ。キーはユニークでなければならず、同じキーを二度登録することはできない。アクセスも高速で、特に検索や更新が得意だ。

C#

// Dictionaryの基本的な使い方
Dictionary<string, int> ages = new Dictionary<string, int>();
ages["Alice"] = 30;
ages["Bob"] = 25;


// 値の取得
int aliceAge = ages["Alice"];
Console.WriteLine(aliceAge); // 30 

よく使う場面と注意点

Dictionaryは、大量のデータをキーで高速に検索したいときに非常に役立つ。ただし、存在しないキーを使って値を取得しようとすると例外が発生するので注意が必要だ。

追加、修正、削除、データの取り出しについても順に見てみよう。

C#

// 要素の追加
dictionary["Charlie"] = 40;

// 中身の修正
dictionary["Alice"] = 35;

// 存在チェックしてから取得(存在しないと例外になるので注意)
if (dictionary.ContainsKey("Bob")) {
    Console.WriteLine(dictionary["Bob"]);
}

// 要素の削除
dictionary.Remove("Charlie");

// 全てのデータを取り出す
foreach (KeyValuePair<string, int> entry in dictionary) {
    Console.WriteLine($"{entry.Key}{entry.Value} 歳");
} 

キーの確認やTryGetValueで安全に値を扱う方法

データの追加方法には複数の選択肢がある。直接代入でも良いが、既に存在するキーかどうかを確認してから追加する方法が安全だ。また、TryGetValueを使うと、存在しないキーでも例外を出さずに安全に値を取得できる。

C#

Dictionary<string, string> capitals = new Dictionary<string, string>();

// 存在チェックしてから追加
if (!capitals.ContainsKey("日本")) {
    capitals.Add("日本", "東京");
}

// TryGetValueを使った安全な取得
if (capitals.TryGetValue("日本", out string capital)) {
    Console.WriteLine($"日本の首都は {capital}");
} else {
    Console.WriteLine("日本の情報は見つかりませんでした");
} 

具体的な実用例とか使い方

例えば、ユーザー情報を管理したり、設定情報を格納する場面でもDictionaryはよく使われる。以下のように、クラス型を値として使うことも可能だ。

C#

class UserInfo {
    public string Name { get; set; }
    public int Age { get; set; }
}

Dictionary<string, UserInfo> users = new Dictionary<string, UserInfo>();

users["user1"] = new UserInfo { Name = "Taro", Age = 20 };
users["user2"] = new UserInfo { Name = "Hanako", Age = 22 };

// データの出力
foreach (var user in users) {
    Console.WriteLine($"{user.Key}: {user.Value.Name}, {user.Value.Age}歳");
} 

まとめとそのほかのメソッド

Dictionaryには便利なメソッドが他にも存在する。以下の例でいくつか紹介しよう。

C#

Dictionary<int, string> map = new Dictionary<int, string>();
map.Add(1, "一");
map.Add(2, "二");

// Countプロパティ
Console.WriteLine(map.Count); // 2

// Keysプロパティ
foreach (int key in map.Keys) {
    Console.WriteLine($"キー: {key}");
}

// Valuesプロパティ
foreach (string value in map.Values) {
    Console.WriteLine($"値: {value}");
}

// Clearメソッド
map.Clear();
Console.WriteLine(map.Count); // 0 

このように、Dictionaryは柔軟で高速なデータ構造を提供する頼もしいクラスだ。データの月明かりとなって、君の開発を静かに照らしてくれるだろう。

このブログを検索

QooQ