Dictionary<TKey, TValue>からキーだけ、あるいは値だけをそれぞれTKey[]型、TValue[]型の配列として取得する方法をご紹介いたします。

辞書の定義

まずはサンプル用の辞書を定義します。

イメージ 1
図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
図2 Linqを使う方法

// Linq
string[] keys = dict.Keys.ToArray();
string[] values = dict.Keys.ToArray();

System.Linq名前空間をusingしていることが前提のコードです。
Linq名前空間によってIEnumerable互換型に対して提供される拡張メソッドを利用しております。

Linqを使わない方法

C#のバージョンなどの都合でLinqという素晴らしいものが使えない状況下で利用できるコードです。

イメージ 3
図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
図4 実行結果

Linqを使った場合、使わなかった場合、実行結果はもちろん両方同じになります。
でも、Linqを使ったほうが簡単ですよね?