- 2004-09-03 (金)
- Web And Technology
主張
VBでもPerlライクな連想配列(HASH)を使いたい
解決策
Dictionary オブジェクトを使うべし
同オブジェクトのVBヘルプを見ても、そこには「Dictionary オブジェクトは、PERL の関連配列と同等です」と書かれているように、思いっきり連想配列として使って欲しそうなオブジェクトです。「PERLの関連配列」って微妙な和訳ですけど...
Dictionaryの使い方
変数宣言&項目追加
Dim h as Object Set h = CreateObject("Scripting.Dictionary") '項目追加の基本形 h.Add "key1","val1" h.Add "key2","val2" h.Add "key3","val3" 'Perlライクな書き方での項目追加も可能 h.Item("key4") = "val4" h.Item("key5") = "val5" 'プロパティを省略した場合にデフォルトでコールされるのは Item プロパティなので 'よりPerlライクな書き方も可能 h("key6") = "val6"
項目の値変更
'Itemプロパティに対して直接値をセットするだけでOK h.Item("key4") = "new val4"
項目の削除
'Removeメソッドを使う
'例:下記のように書くと key2 : val2 のKey:Valueセットが削除される h.Remove("key2")
ループ処理
'Key値によるループ処理
dim v as variant For Each v In h.Keys Debug.Print "KEY値:" & v & "VALUE値:" & h.Item(v) Next 'Value値によるループ処理も可能(使用頻度は低いはず) For Each v In h.Items Debug.Print v Next
項目の存在確認
'指定したKEY値が Dictionary の中に存在する場合は True が返る
'例:下記のように書くと vbTrue 値が返る h.Exists("key3")
前回書いた Collection と、今回の Dictionary を駆使する事で Array & Hash によるデータ構造体を Perl構造体 を扱うように記述できるようになります。もっとも VB.NET の世界に入ってしまえばOOP前提ですのでクラスの入れ子構造で同じようなデータ構造体を自然と扱うようになるのでしょうけど。
おまけ
VB.NETの世界では Dictionaryオブジェクトではなく、Hashtable というクラスが連想配列として用意されているようです → System.Collections.Hashtable
詳しい事は @ITのTIPS記事を参照の事。
- Newer: ハーゲンダッツ:カスタードプディング復活
- Older: VB6 - 便利な配列