Dictionary<TKey,TValue>を利用して Key-Valueデータを扱う
Dictionaryクラスを使ってKey-Valueデータを扱うコードを紹介します。
概要
C#でkeyに対応した値(value)を管理する際にはDictionaryクラスを利用できます。
この記事ではDictionaryクラスを利用してデータの格納や取り出しをするコードを紹介します。
実装例:値の追加と取得
Dictionaryクラスのインスタンスを作成し、キーと値を挿入するプログラムです。
Windowsフォームアプリケーションを作成します。
UI
下図のフォームを作成します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DictionaryDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
int value = data["news.html"];
textBox1.Text += Convert.ToString(value)+"\r\n";
}
}
}
解説
下記コードにてDictionaryクラスを宣言します。Typeの最初の要素がキーに、2番目の要素が値になります。上記のコードではstring型のキーでint型の値を持ちます。
Dictionary<string, int> data = new Dictionary<string, int>();
Add()メソッドを呼び出してKey-Valueデータを追加します。
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
キーを指定してキーの値を取り出します。上記のコードでは"news.html"のキーの値を取得します。(58が取得されます。)
int value = data["news.html"];
取得した値をテキストボックスに表示します。
textBox1.Text += Convert.ToString(value)+"\r\n";
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]のボタンをクリックします。"news.html”の値の58がテキストボックスに表示されます。
存在しないキーへの対処
以下のコードを実行すると存在しないキーを指定して値を取り出すことになり、KeyNotFoundException 例外が発生します。
private void button3_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
int value = data["mail.html"];
}
例外を発生させないための対策として、ContainsKeyメソッドを呼び出してキーが含まれるかを判定してから値を取り出します。
private void button4_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
if (data.ContainsKey("mail.htm") == true) {
int value = data["mail.html"];
textBox1.Text += Convert.ToString(value) + "\r\n";
}
}
または、TryGetValue()メソッドを用います。
private void button5_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
int value;
if (data.TryGetValue("news.html", out value) == true) {
textBox1.Text += Convert.ToString(value) + "\r\n";
}
}
Dictionaryクラスへの値の追加
DictionaryクラスへのKey-Valueデータの追加はAddメソッド以外にも、以下の配列の書式でも追加できます。
private void button6_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data["index.html"]=100;
data["product.html"]=34;
data["news.html"]=58;
data["contact.html"]=27;
data["download.html"]=48;
int value = data["news.html"];
textBox1.Text += Convert.ToString(value) + "\r\n";
}
Key Valueの列挙
以下のコードはDictionaryクラスに追加されている、すべての値、キーを列挙します。
private void button7_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
//
foreach (string key in data.Keys) {
textBox1.Text += string.Format("{0:s}:{1:d}\r\n", key, data[key]);
}
//
foreach (int v in data.Values) {
textBox1.Text += string.Format("{0:d}\r\n", v);
}
//
}
KeyValuePairを用いるとキーと値を同時に取得できます。
private void button8_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
foreach (KeyValuePair<string, int> kvp in data) {
textBox1.Text += string.Format("{0:s}:{1:d}\r\n", kvp.Key, kvp.Value);
}
}
SortedDictionaryを用いたキーのソート
SortedDictionaryを用いるとキーの値でソートできます。
private void button9_Click(object sender, EventArgs e)
{
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("index.html", 100);
data.Add("product.html", 34);
data.Add("news.html", 58);
data.Add("contact.html", 27);
data.Add("download.html", 48);
SortedDictionary<string, int> sdata = new SortedDictionary<string, int>(data);
foreach (KeyValuePair<string, int> kvp in sdata) {
textBox1.Text += string.Format("{0:s}:{1:d}\r\n", kvp.Key, kvp.Value);
}
}
実行結果
このページのキーワード
- C#
- Dictionary
- Key-Valueデータ
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用