Dictionary<TKey, TValue>からキーだけ、あるいは値だけをそれぞれTKey[]型、TValue[]型の配列として取得する方法をご紹介いたします。
今回は、キーも値もstring型を利用しておりますが、紹介する方法は、型にとらわれないものです。
適宜書き換えて下さい。
C#をお使いになるのであれば、Linqは積極的に利用していきましょう。
System.Linq名前空間をusingしていることが前提のコードです。
Linq名前空間によってIEnumerable互換型に対して提供される拡張メソッドを利用しております。
Linqを使った場合、使わなかった場合、実行結果はもちろん両方同じになります。
でも、Linqを使ったほうが簡単ですよね?
辞書の定義
まずはサンプル用の辞書を定義します。
図1 辞書の定義
// 辞書「dict」の定義
var dict = new Dictionary<string, string>();
dict.Add("りんご", "Apple");
dict.Add("バナナ", "Banana");
dict.Add("もも", "Peach");
表1 辞書の内容
Key |
Value |
りんご |
Apple |
バナナ |
Banana |
もも |
Peach |
今回は、キーも値もstring型を利用しておりますが、紹介する方法は、型にとらわれないものです。
適宜書き換えて下さい。
Linqを使う方法
Linqは正義です。C#をお使いになるのであれば、Linqは積極的に利用していきましょう。

図2 Linqを使う方法
// Linq
string[] keys = dict.Keys.ToArray();
string[] values = dict.Keys.ToArray();
System.Linq名前空間をusingしていることが前提のコードです。
Linq名前空間によってIEnumerable互換型に対して提供される拡張メソッドを利用しております。
Linqを使わない方法
C#のバージョンなどの都合でLinqという素晴らしいものが使えない状況下で利用できるコードです。
図3 Linqを使わない方法
// Linqを使わない
string[] keys = new string[dict.Count];
string[] values = new string[dict.Count];
int i = 0;
foreach (var item in dict)
{
keys[i] = item.Key;
values[i] = item.Value;
i++;
}
実行結果
取得したkeyの一覧「keys」の内容を改行して出力してみました。
図4 実行結果
Linqを使った場合、使わなかった場合、実行結果はもちろん両方同じになります。
でも、Linqを使ったほうが簡単ですよね?