DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Dictionaryのキーや値を配列やListに変換する

ここでは、ハッシュテーブルとして働くジェネリックコレクションであるDictionary(System.Collections.Generic名前空間)のキーと値を配列やListに変換する方法を紹介します。なおDictionaryクラスは、.NET Framework 2.0以降で使用できます。

CopyToメソッドを使用する方法

KeyCollection.CopyToメソッドValueCollection.CopyToメソッドを使用して、Dictionaryのキーや値を配列にコピーすることができます。

以下にその例を示します。

VB.NET
コードを隠すコードを選択
'Imports System.Collections.Generic

'配列に変換するDictionary
Dim dic As New Dictionary(Of Integer, String)()
dic.Add(1, "いち")
dic.Add(2, "に")
dic.Add(3, "さん")

'キーを配列に変換する
'配列を作成する
Dim keys As Integer() = New Integer(dic.Keys.Count - 1) {}
'キーを配列にコピーする
dic.Keys.CopyTo(keys, 0)

'値を配列に変換する
Dim vals As String() = New String(dic.Values.Count - 1) {}
dic.Values.CopyTo(vals, 0)
C#
コードを隠すコードを選択
//using System.Collections.Generic;

//配列に変換するDictionary
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "いち");
dic.Add(2, "に");
dic.Add(3, "さん");

//キーを配列に変換する
//配列を作成する
int[] keys = new int[dic.Keys.Count];
//キーを配列にコピーする
dic.Keys.CopyTo(keys, 0);

//値を配列に変換する
string[] vals = new string[dic.Values.Count];
dic.Values.CopyTo(vals, 0);

Listのコンストラクタを使用する方法

List<T>(IEnumerable<T>)コンストラクタを使えば、Dictionaryのキーや値のコレクションを基にしてListを作成できます。

VB.NET
コードを隠すコードを選択
'Imports System.Collections.Generic

'Listに変換するDictionary
Dim dic As New Dictionary(Of Integer, String)()
dic.Add(1, "いち")
dic.Add(2, "に")
dic.Add(3, "さん")

'キーをListに変換する
Dim keysList As New List(Of Integer)(dic.Keys)

'値をListに変換する
Dim valsList As New List(Of String)(dic.Values)
C#
コードを隠すコードを選択
//using System.Collections.Generic;

//Listに変換するDictionary
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "いち");
dic.Add(2, "に");
dic.Add(3, "さん");

//キーをListに変換する
List<int> keysList = new List<int>(dic.Keys);

//値をListに変換する
List<string> valsList = new List<string>(dic.Values);

ToArray、ToListメソッドを使用する方法

.NET Framework 3.5以降でLINQが使えるのであれば、Enumerable.ToArrayメソッドを使って配列に変換できます。Listに変換するのであれば、Enumerable.ToListメソッドを使います。

VB.NET
コードを隠すコードを選択
'Imports System.Linq
'Imports System.Collections.Generic

'配列に変換するDictionary
Dim dic As New Dictionary(Of Integer, String)()
dic.Add(1, "いち")
dic.Add(2, "に")
dic.Add(3, "さん")

'キーを配列に変換する
Dim keysArray As Integer() = dic.Keys.ToArray()

'値を配列に変換する
Dim valsArray As String() = dic.Values.ToArray()

'キーをListに変換する
Dim keysList As List(Of Integer) = dic.Keys.ToList()

'値をListに変換する
Dim valsList As List(Of String) = dic.Values.ToList()
C#
コードを隠すコードを選択
//using System.Linq;
//using System.Collections.Generic;

//配列に変換するDictionary
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "いち");
dic.Add(2, "に");
dic.Add(3, "さん");

//キーを配列に変換する
int[] keysArray = dic.Keys.ToArray();

//値を配列に変換する
string[] valsArray = dic.Values.ToArray();

//キーをListに変換する
List<int> keysList = dic.Keys.ToList();

//値をListに変換する
List<string> valsList = dic.Values.ToList();

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。