タイトル | : 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 の使用をオススメします。
|