C# Dictionaryの使い方|キーで検索する

広告

C#で キー から  を取得するには Dictionary を使います。

Dictionary<string, string> phoneBook = new Dictionary<string, string>();
phoneBook["山田"] = "090-1111-2222";
phoneBook["佐藤"] = "080-3333-4444";

string phone = phoneBook["山田"];  // 090-1111-2222

名前で電話番号をすぐに取り出せるのが特徴です。

この記事では Dictionary の基本と List との使い分けを解説します。


C# Dictionaryとは

Dictionary は

キーと値のペアを管理するコレクション

です。

  • キー:検索の手がかり(名前など)
  • 値:取り出したいデータ(電話番号など)

辞書のように キーを指定すると値が返ってきます。


基本構文

Dictionary<キーの型, 値の型> 変数名 = new Dictionary<キーの型, 値の型>();

Dictionary<string, string> phoneBook = new Dictionary<string, string>();
Dictionary<string, int> scores = new Dictionary<string, int>();

シンプルなサンプル

using System;
using System.Collections.Generic;

namespace DictionarySample
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> phoneBook = new Dictionary<string, string>();

            phoneBook.Add("山田", "090-1111-2222");
            phoneBook.Add("佐藤", "080-3333-4444");
            phoneBook.Add("田中", "070-5555-6666");

            Console.WriteLine(phoneBook["山田"]);
        }
    }
}

実行結果

090-1111-2222

登録の2つの方法

Add メソッド

phoneBook.Add("山田", "090-1111-2222");

同じキーを Add すると例外になります。

インデックスで代入

phoneBook["山田"] = "090-1111-2222";

同じキーがあれば上書きされます。


値の取得

string phone = phoneBook["山田"];

キーが存在しないと例外になります。

安全に取得する(TryGetValue)

if (phoneBook.TryGetValue("山田", out string phone))
{
    Console.WriteLine(phone);
}
else
{
    Console.WriteLine("見つかりません");
}

ContainsKey で存在確認

if (phoneBook.ContainsKey("山田"))
{
    string phone = phoneBook["山田"];
}

foreach で全件処理

foreach (var item in phoneBook)
{
    Console.WriteLine($"{item.Key} : {item.Value}");
}

CSV読み込みと組み合わせる

Dictionary<string, string> phoneBook = new Dictionary<string, string>();
string[] lines = File.ReadAllLines("data.txt");

foreach (string line in lines)
{
    string[] data = line.Split(',');
    phoneBook[data[0]] = data[1];  // 名前 → 電話番号
}

string phone = phoneBook["山田"];

Dictionary と List + クラスの違い

項目DictionaryList + クラス
検索キーで即取得foreach で検索
拡張キー・値の2つだけプロパティを自由に追加
向いている用途名前→電話番号のみ住所・メールなど追加する

List + クラスが向く場合

  • 住所・メール・メモなど項目を増やしたい
  • オブジェクト指向の学習
  • データの形が複雑

Dictionaryが向く場合

  • キーで検索するだけ
  • シンプルな名前→値の対応

よくあるエラー

存在しないキーでアクセス

string phone = phoneBook["存在しない名前"];  // 例外

対策

TryGetValue や ContainsKey を使う。

using の忘れ

using System.Collections.Generic;

まとめ

C#の Dictionary は

キーから値をすぐに取り出せる

コレクションです。

主な用途

  • 名前→電話番号
  • 商品名→価格
  • ID→オブジェクト

項目を増やしたい場合は List + クラス が向いています。


関連記事

前の記事

C# Listの使い方|複数データを管理する

では List の基本を解説しています。

次の記事

C# クラスの作り方|データの形を定義する

では 拡張しやすいデータの形をクラスで定義する方法を解説します。

実践

WinFormsで作る電話帳アプリ(Listで管理する版)

では List + クラスで電話帳アプリを作る方法を解説します。

訪問数 4 回, 今日の訪問数 4回

広告

C#

Posted by hidepon