C#

【C#】dictionaryとは?初期化の仕方や基本の使い方を徹底解説

こんにちは、リバティエンジニア[?]のたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

今回はC#の「dictionary」について初期化の仕方などの基本から要素の取り出しや存在確認なども解説します。

C#でのdictionaryとは?

C#のDictionaryでは、
・Key(キー): インデックス番号の代わりに使われる名前
・Value(バリュー) :値
この2つをセットで扱うことができます。

「Key」と「Value」をセットで扱う配列のことを「連想配列」と呼びます。

C#では連想配列を扱うためのクラスが「Dictionaryクラス」になるというわけです。DictionaryクラスではKeyを使うことでValueの値を取得することができます。

Dictionaryを扱う上で注意してほしいことが一つだけあります。
それは

「Key」の値を重複させることはできない。

ということです。これだけは覚えておいてください。

【C#】DictionaryとListコレクションの違い

ここまでの話でDictionaryとListコレクションの違いがいまいちわからない。という方が出てくるかと思います。

そこでここからは、DictionaryとListコレクションの違いについてのお話をします。

C# Listコレクションについて

少し前にListコレクションについてお話ししたのを覚えていますでしょうか。
忘れかけている方は再度確認しておくといいかもです。

[C#] Listに要素を追加/挿入するには?

【C#】 Listの要素を削除する方法

ListとDictionaryの違い

では早速C#でのListとDictionaryは何が違うのかを見ていきましょう。

まず、Listコレクションですが、こちらは「インデックス番号」を使って要素の値を取得します。

それに対して、Dictionaryでは先程もお話したとおり「Key」の値を使って「Value」の値を取得するので、数値ではなく文字列などを指定することで、セットの値を取得することができます。

管理するものが、「項目」とそれに対応した「値」というように、セットでデータを取り扱いたい場合に便利です。

C# Dictionaryの使い方

ここまでで、Dictoinaryは「Key」と「Value」で管理する事ができるもの。ということがわかりました。

では早速使い方を見ていきましょう。

Dictionaryの定義のしかた

Dictionaryは以下のように宣言して定義することができます。


using System.Collections.Generic;
Dictionary<string, string> dictionary = new Dictionary<string, string>();

Dictionaryクラスを使用するには、usingを使って「System.Collections.Generic」クラスを呼び出しておく必要がありますので、お忘れなく。
usingについては下の記事を参考にしてみてください。

【C#】 usingステートメントとは?サンプルコードで解説

またDictionaryは以下のように記述することもできます。


var オブジェクト名 = new Dictionary<Keyの型名, Valueの型名>()

「var」とはなにか簡単に説明すると、「型推論」です。
明らかに型がなにかわかるときは自動的に(暗黙的に)型を変換してくれます。

Dictionaryに要素を追加する

次にDictionaryに実際に要素を追加してみましょう。

方法としては2つあります。
1. 初期化の時に追加する方法
2. Addメソッドを使う方法

順番に見ていきましょう。

初期化の時に追加する方法

Dictionaryは宣言時に初期化することもできます。

サンプルコードを御覧ください。

var オブジェクト名 = new Dictionary<Keyの型名, Valueの型名>()
{
{Key0, Value0},
{Key1, Value1},
・・・・・・
};

このように、初期化(new)のタイミングで値を設定して初期化することもできます。

Addメソッドを使う方法

C# のDictionaryクラスにはAddというメソッドがあり、これを使って要素を追加することもできます。


Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("01", "北海道"); dictionary.Add("02", "青森県"); dictionary.Add("03", "岩手県");

このようにすることでキーと値を設定できます。

この時に注意してほしいのが、指定したKeyの要素が既に存在する場合には例外が発生することです。
これを回避する方法として、ContainsKeyメソッドで要素の存在を確認してから追加すると安全ですね。

要素の取得

例)Key=02のValue値を取得する

【方法1】
string name = dictionary["02"];

【方法2】
string name;
bool b = dictionary.TryGetValue("02", out name);

※方法1の場合、指定したKeyが無い時は例外が発生します。例外を発生させたくない場合は、dic.ContainsKeyメソッドでキーが存在の有無を判定してから要素を取得してください。

要素の更新

例)Key=01のValueを「ほっかいどう」に更新する

dictionary["01"] = "ほっかいどう";

要素の削除

例)Key値="02"の要素を削除する

dictionary.Remove("02");
例)全ての要素を削除する

dictionary.Clear();

Key値、Value値が存在するかどうか確認する

例)Key="01"が存在するかどうか確認する

bool b = dictionary.ContainsKey("02");
例)Value値="北海道"が存在するかどうか確認する

bool b = dictionary.ContainsValue("北海道");

要素数の取得

例)要素数を取得する

int cnt = dictionary.Count;

Dictionary型を別の型に変換する

例)Dictionary型をList型に変換する

List<KeyValuePair<string, string>> list = dictionary.ToList();

※ KeyValuePair型のListになります。

例)Dictionary型を配列に変換する

KeyValuePair<string, string>[] arr = dictionary.ToArray();

※KeyValuePair型の配列になります。

foreachで要素を取り出す

Dictionary型の中身を1つ1つ取り出して処理したい場合は、foreach文が便利です。

例)foreachで要素を取り出す

// 全要素をループ
foreach(string str in dictionary){
  Console.WriteLine(str);
}

C# Dictionaryのまとめ

今回は、C# でのDictionaryクラスの使い方を解説しました。
キーと値のセットで保持できるので、使い所が多くかなり便利だと思います。

ぜひ使って見てください。
調べて学習したあとは必ず自分の環境でもアレンジして動作確認して動かしてみることをおすすめします。

圧倒的にアタマに入ってきます。
よかったら実践してみてくださいね。

他にもC# の記事を出しているので良かったら見てみてください。

【C#】プロパティとは?利用するメリットはあるのか。

【結論】未経験でプログラミングの独学はぜんぜん可能

【C#】 usingステートメントとは?サンプルコードで解説

[temp id=2]

Copyright© FUNA BLOG , 2020 All Rights Reserved.