| | タイトル | : Re: コレクションとハッシュテーブル |  | 記事No | : 4718 |  | 投稿日 | : 2006/12/20(Wed) 19:58 |  | 投稿者 | : 魔界の仮面弁士 | 
 > Dim hush As New Hashtable「hush」だと、意味が変わってしまうような。
 
 > Debug.Print(CStr(hush("c")))
 コードの記述からして、VB2005 ですね?
 
 
 > 何が違うのですか?
 HashTable は、キーによる管理を行うためのクラスです。
 ArrayList は、順序による管理を行うためのクラスです。
 Collection は、順序による管理を重視しますが、キーによる管理もできます。
 
 
 そもそも、Microsoft.VisualBasic.Collection の方は、キー指定は必須ではありませんが、
 System.Collections.Hashtable は、キー指定が必須となっています。これが最大の違いです。
 
 そのため Collection では、キーを指定して取得するだけでなく、「3番目の要素」といった、
 位置指定での値取得が可能になっていますし、Add メソッドの Before/After 引数によって、
 位置指定での値登録も可能となっています。
 一方の HashTable は、キー主体で管理され、登録順についての指定はできません。
 
 
 それから、登録された値の扱いも異なります。
 Collection の場合、代入した値は固定的で、後から変更することが出来ませんが、
 HashTable の方は、登録済みの値を変更することができます。
 
 このため、HashTable では、
 hash("d") = "4444"
 という「値の代入」が可能ですが、Collection で値を変更するには、
 それを一度削除してから、再度登録しなおすという手順が必要となります。
 
 
 それと、データの列挙時にも違いがあります。
 Collection の内容を列挙する場合には、
 For I As Integer = 1 To col.Count
 Debug.Print("value={0}", col(I))
 Next
 のように、「For 〜 Next」による、位置指定での『値の列挙』と、
 For Each o As Object In col
 Debug.Print("value={0}", o)
 Next
 のように、「For Each 〜 Next」による『値の列挙』が可能です。
 しかし「キーの列挙」機能は、持ち合わせていません。
 
 
 一方、HashTable の場合は、「For 〜 Next」による指定ができません。そのかわりに、
 For Each o As DictionaryEntry In hash
 Debug.Print("key={0}, value={1}", o.Key, o.Value)
 Next
 のように、値とキーを同時に列挙できますし、
 For Each o As Object In hash.Values
 Debug.Print("value={0}", o)
 Next
 For Each o As Object In hash.Keys
 Debug.Print("key={0}", o)
 Next
 のように、キーと値を個別に列挙することもできます。
 
 
 
 > 『あるキーを渡して、対応する値を取得する』という機能を実現したい場合、
 > どちらを使う方が良いですか?
 
 どちらでもなく、System.Collections.Generic.Dictionary の使用をオススメします。
 
 |