×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コレクションクラスの 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
コメント