foreachループを利用して、Dictionaryオブジェクトのキーや値のすべての要素を参照するコードを紹介します。
Dictionaryオブジェクトに格納されているキーの一覧や値の一覧をループで取得したい場合があります。
Dictionaryオブジェクト自体はforeachループを利用できませんが、Keysプロパティ(KeyCollection型)や、Valuesプロパティ(ValueCollection型)は
IEnumerableを継承しているため、foreachループが利用できます。
foreachループを利用してDictionaryオブジェクトのキーの一覧を出力する例です。
下図のUIを作成します。
下記コードを記述します。[button1]のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DictionaryEnumerate
{
public partial class FormDictionaryForeach : Form
{
internal class MyItem
{
public int id;
public string name = "";
public int price;
}
Dictionary<int, MyItem> Items;
public FormDictionaryForeach()
{
InitializeComponent();
}
private void FormDictionaryForeach_Load(object sender, EventArgs e)
{
Items = new Dictionary<int, MyItem>();
MyItem mi;
mi = new MyItem() { id = 8, name = "ぺんぎんクッキー", price = 240 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 4, name = "らくだキャラメル", price = 85 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 2, name = "しろくまアイス", price = 160 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 7, name = "あひるタルト", price = 220 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 1, name = "かるがもカステラ", price = 320 };
Items.Add(mi.id, mi);
}
private void button1_Click(object sender, EventArgs e)
{
foreach (int i in Items.Keys)
{
textBox1.Text += String.Format("{0:d}\r\n", i);
}
}
}
}
Loadイベントでは、Dictionaryオブジェクトの値を設定していてます。
MyItemオブジェクトを作成しメンバ変数に値を設定し、DictionaryオブジェクトにIDの値をキーにして追加しています。
private void FormDictionaryForeach_Load(object sender, EventArgs e)
{
Items = new Dictionary<int, MyItem>();
MyItem mi;
mi = new MyItem() { id = 8, name = "ぺんぎんクッキー", price = 240 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 4, name = "らくだキャラメル", price = 85 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 2, name = "しろくまアイス", price = 160 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 7, name = "あひるタルト", price = 220 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 1, name = "かるがもカステラ", price = 320 };
Items.Add(mi.id, mi);
}
プロジェクトを実行します。下図のウィンドウが表示されます。
[butoon1]をクリックします。下部のテキストボックスにキーの一覧が表示されます。
下図のUIを作成します。
下記コードを記述します。[button2]のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DictionaryEnumerate
{
public partial class FormDictionaryForeach : Form
{
internal class MyItem
{
public int id;
public string name = "";
public int price;
}
Dictionary<int, MyItem> Items;
public FormDictionaryForeach()
{
InitializeComponent();
}
private void FormDictionaryForeach_Load(object sender, EventArgs e)
{
Items = new Dictionary<int, MyItem>();
MyItem mi;
mi = new MyItem() { id = 8, name = "ぺんぎんクッキー", price = 240 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 4, name = "らくだキャラメル", price = 85 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 2, name = "しろくまアイス", price = 160 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 7, name = "あひるタルト", price = 220 };
Items.Add(mi.id, mi);
mi = new MyItem() { id = 1, name = "かるがもカステラ", price = 320 };
Items.Add(mi.id, mi);
}
private void button2_Click(object sender, EventArgs e)
{
foreach (MyItem m in Items.Values)
{
textBox1.Text += String.Format("{0:d} {1} {2:d}\r\n", m.id, m.name, m.price);
}
}
}
}
Loadイベントでは、Dictionaryオブジェクトの値を設定していてます。先の例と同様のコードです。
button2では、foreach ループを利用してDictionaryオブジェクトの値をすべて取得します。
foreachループのinの値にDictionaryオブジェクトのValuesプロパティを与えます。
private void button2_Click(object sender, EventArgs e)
{
foreach (MyItem m in Items.Values)
{
textBox1.Text += String.Format("{0:d} {1} {2:d}\r\n", m.id, m.name, m.price);
}
}
プロジェクトを実行します。下図のウィンドウが表示されます。
[butoon2]をクリックします。下部のテキストボックスに値のクラスオブジェクト(MyItem)のプロパティ値が表示されます。