コレクションクラスの Dictionary は内部的にキー(Keys)と要素(Values)を別々のコレクションとして持っているので、 それぞれ個別に配列に変換ができます。
■Dictionary のキー・要素から配列及び List への変換(ToArray, ToList)
Dictionary のキー(Keys)及び要素(Values)はコレクションとして保持されていて、 そのコレクションとして以下の様なメソッドがあります。
| メソッド or プロパティ | 書式 | 説明 |
|---|---|---|
| ToArray | ToArray() As T() 戻り値: コレクションの内容をそのデータ型の一次元配列を返す |
コレクションの内容を配列として返す |
| ToList | ToList() As List(Of T) 戻り値: コレクションの内容を List コレクションとして返す |
コレクションの内容をList コレクションとして返す |
| Count | Count As Integer (これはプロパティ) | コレクションに存在する要素の数を取得します |
| CopyTo | CopyTo(array() As T, index As Integer) array:コレクションから要素がコピーされる 1次元の System.Array index:コピーの開始位置で、array 内の 0 から始まるインデックス 例外:ArgumentOutOfRangeException index が 0 未満 例外:ArgumentException コレクションの要素数が index からコピー先の array の 末尾までに格納できる数を超えています |
コレクション全体を互換性のある1次元の指定したインデックスから配列にコピーします |
以下のソースを見て下さい。ToArray, ToList の例を記します。
配列からの要素取得は通常の For で直接要素を指標で指定し、 List の場合には For Each で順次要素を取得します。
Private Sub btnList_Click(sender As Object, e As EventArgs) Handles btnList.Click
Dim i As Integer = 0
' Dictionaryの生成(初期化)
Dim dic As New Dictionary(Of String, String) From _
{{"USA", "America"}, {"CHN", "China"}, {"JPN", "Japan"}}
' Values(要素の値)を配列へ変換
Dim arrVal() As String
Console.WriteLine("=== Values : ToArray ===")
arrVal = dic.Values.ToArray()
For i = 0 To UBound(arrVal)
Console.WriteLine("arrVal({0})の要素:{1}", i, arrVal(i))
Next
' Values(要素の値)を配列へのコピー
Console.WriteLine("=== Values : ToList ===")
Dim listV As List(Of String) = dic.Values.ToList
i = 0
For Each Str As String In listV
Console.WriteLine("{0}番目の要素:{1}", i, Str)
i += 1
Next
' Keys(キーの値)を配列へ変換
Dim arrKey() As String
Console.WriteLine("=== Keys : ToArray ===")
arrKey = dic.Keys.ToArray
For i = 0 To UBound(arrKey)
Console.WriteLine("arrKey({0})の要素:{1}", i, arrKey(i))
Next
' Keys(キーの値)を配列へのコピー
Console.WriteLine("=== Keys : ToList ===")
Dim listK As List(Of String) = dic.Keys.ToList
i = 0
For Each Str As String In listV
Console.WriteLine("{0}番目の要素:{1}", i, Str)
i += 1
Next
End Sub
実行結果がコンソールには以下様に表示されます。
=== Values : ToArray === arrVal(0)の要素:America arrVal(1)の要素:China arrVal(2)の要素:Japan === Values : ToList === 0番目の要素:America 1番目の要素:China 2番目の要素:Japan === Keys : ToArray === arrKey(0)の要素:USA arrKey(1)の要素:CHN arrKey(2)の要素:JPN === Keys : ToList === 0番目の要素:USA 1番目の要素:CHN 2番目の要素:JPN
■Dictionary のメソッド CopyTo について
CopyTo メソッドは指定した配列のインデックスからコレクションをコピーします。
以下の例では、最初のディクショナリを ToArray により配列に変換後、2番目のディクショナリをその配列の直後にコピーしています。 コピーする前に配列の要素数を拡張しています。
Private Sub btnList_Click(sender As Object, e As EventArgs) Handles btnList.Click
Dim i As Integer = 0
' Dictionaryの生成(初期化)
Dim dic As New Dictionary(Of String, String) From _
{{"USA", "America"}, {"CHN", "China"}, {"JPN", "Japan"}}
Dim dic2 As New Dictionary(Of String, String) From _
{{"FRA", "France"}, {"IRL", "Ireland"}, {"THA", "Thailand"}, {"BTN", "Bhutan"}}
' Values(要素の値)を配列へ変換
Dim arrVal() As String
Console.WriteLine("=== Values : ToArray ===")
arrVal = dic.Values.ToArray()
For i = 0 To UBound(arrVal)
Console.WriteLine("arrVal({0})の要素:{1}", i, arrVal(i))
Next
' Values(要素の値)を配列へのコピー
Console.WriteLine("=== Values : CopyTo ===")
Dim idxMax As Integer = UBound(arrVal)
ReDim Preserve arrVal(idxMax + dic2.Values.Count)
dic2.Values.CopyTo(arrVal, idxMax + 1)
For i = 0 To UBound(arrVal)
Console.WriteLine("arrVal({0})の要素:{1}", i, arrVal(i))
Next
' Keys(要素の値)を配列へ変換
Dim arrKey() As String
Console.WriteLine("=== Keys : ToArray ===")
arrKey = dic.Keys.ToArray
For i = 0 To UBound(arrKey)
Console.WriteLine("arrKey({0})の要素:{1}", i, arrKey(i))
Next
' Values(要素の値)を配列へのコピー
Console.WriteLine("=== Keys : CopyTo ===")
idxMax = UBound(arrKey)
ReDim Preserve arrKey(idxMax + dic2.Keys.Count)
dic2.Keys.CopyTo(arrKey, idxMax + 1)
For i = 0 To UBound(arrKey)
Console.WriteLine("arrKey({0})の要素:{1}", i, arrKey(i))
Next
End Sub
結果は以下の通りです。
=== Values : ToArray === arrVal(0)の要素:America arrVal(1)の要素:China arrVal(2)の要素:Japan === Values : CopyTo === arrVal(0)の要素:America arrVal(1)の要素:China arrVal(2)の要素:Japan arrVal(3)の要素:France arrVal(4)の要素:Ireland arrVal(5)の要素:Thailand arrVal(6)の要素:Bhutan === Keys : ToArray === arrKey(0)の要素:USA arrKey(1)の要素:CHN arrKey(2)の要素:JPN === Keys : CopyTo === arrKey(0)の要素:USA arrKey(1)の要素:CHN arrKey(2)の要素:JPN arrKey(3)の要素:FRA arrKey(4)の要素:IRL arrKey(5)の要素:THA arrKey(6)の要素:BTN
関連する記事
⇒コレクション「List」の使い方について⇒コレクション「List」と配列の相互変換について
⇒配列の使い方について(Dim, Redim)
⇒配列の使い方の注意点について(コピー, Clone)
⇒配列の範囲指定によるコピー(Array.Copy, Skip, Take)
PR
コメント