Visual Basic .NET または Visual Basic 2005 で HashTable コレクションを使用する方法

この記事は、以前は次の ID で公開されていました: JP307933
概要
この資料では、HashTable コレクションに関する情報を提供します。ハッシュを使用すると、コストの高いデータ検索が不要になるため、効率的にデータを取得できます。ハッシュでは、キー自体の値を使用してデータを検索します。

クラス ライブラリでは、System.Collections 名前空間に定義された HashTable クラスが提供されているため、独自のハッシュ テーブルをコーディングする必要はありません。

先頭に戻る

サンプル プロジェクトをビルドする

HashTable コレクションには (キー、値) のペアが格納され、キーを使用して格納場所のハッシュと取得を行います。キーは不変で、HashTable 内に同じキーが複数存在することはできません。このサンプルでは、単純な Person クラスのいくつかのインスタンスを HashTable に格納します。名前の姓がキーとして使用されます。
  1. Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 を起動し、Visual Basic Windows アプリケーション プロジェクトを作成します。デフォルトで Form1 がプロジェクトに追加されます。
  2. ソリューション エクスプローラで、プロジェクト名を右クリックし、[追加] をポイントし、[クラスの追加] (または [クラス]) をクリックしてクラス モジュールを追加します。デフォルトで Class1 がプロジェクトに追加されます。
  3. [新しい項目の追加] ダイアログ ボックスで [開く] をクリックします。

    : Visual Studio 2005 では、[開く] の代わりに [追加] をクリックします。
  4. Class1 モジュール内のすべてのコードを以下のコードに置き換えます。
    Public Class Person    Public Fname, Lname As String    Sub New(ByVal FirstName As String, ByVal LastName As String)        Fname = FirstName        Lname = LastName    End Sub    Public Overrides Function ToString() As String        Return Fname + " " + Lname    End FunctionEnd Class						
    Person クラスには、1 つのコンストラクタがあります。このコンストラクタは、FirstName および LastName をパラメータとして取り、これらのパラメータをローカル変数に代入します。ToString 関数は、Object クラスから継承された ToString をオーバーライドし、Fname および Lname を連結して返します。
  5. Form1.vb で、コード モジュールの先頭に以下の Imports ステートメントを追加します。
    Imports System.Collections					
  6. フォーム レベルの Hashtable オブジェクトを作成し、Person 型の 3 つの変数を宣言します。Form1 クラスに以下のコードを追加します。
    Dim MyTable As New Hashtable()'For simplicity, create three Person objects to add to the HashTable collection.Dim Person1, Person2, Person3 As Person  					
  7. 以下の手順では、Hashtable オブジェクトの Add メソッドを使用して、try-catch ブロック内で 3 つの Person オブジェクトを Hashtable に追加します。try-catch ブロックは、例外をキャッチし、重複キーが存在する場合はメッセージを表示します。
    1. Form1 上にボタン コントロールを作成し、Text プロパティを Add Items に変更します。
    2. ボタンをダブルクリックしてコード ウィンドウを開き、Button1_Click イベントに以下のコードを貼り付けます。
      Person1 = New Person("Karen", "Berge")Person2 = New Person("David", "Campbell")Person3 = New Person("Jim", "Kim")'The Add method takes Key as the first parameter and Value as the second parameter.Try     MyTable.Add(Person1.Lname, Person1)     MyTable.Add(Person2.Lname, Person2)     MyTable.Add(Person3.Lname, Person3)Catch ae As ArgumentException     MessageBox.Show("Duplicate Key")End Try						
  8. Hashtable オブジェクトは、インデクサを提供しています。以下の手順では、キーによってインデックスを作成し、ハッシュされた場所に格納されている値にアクセスします。
    1. Form1 上にボタン コントロールを作成し、Text プロパティを Get Items に変更します。
    2. ボタンをダブルクリックしてコード ウィンドウを開き、Button2_Click イベントに以下のコードを貼り付けます。
      'Use the indexer of the Hashtable class to retrieve your objects. The indexer takes 'Key as a parameter and accesses it with the Hashed location.        Try     MessageBox.Show(MyTable(Person1.Lname).ToString)     MessageBox.Show(MyTable(Person2.Lname).ToString)     MessageBox.Show(MyTable(Person3.Lname).ToString)Catch ex As NullReferenceException     MessageBox.Show("Key not in Hashtable")End Try						
  9. 以下の手順では、Remove メソッドを使用して HashTable コレクションから単一のアイテムを削除します。
    1. Form1 上にボタン コントロールを作成し、Text プロパティを Remove Item に変更します。
    2. ボタンをダブルクリックしてコード ウィンドウを開き、Button3_Click イベントに以下のコードを貼り付けます。
      'Use the Count property.If (MyTable.Count = 0) Then     MessageBox.Show("There are no items in HashTable")Else     MessageBox.Show("The count before removing an Item is" & " " & MyTable.Count)     MessageBox.Show("Removing value stored at key value (Berge)")     'Remove the object that is stored at the Key value Person1.Lname.     MyTable.Remove(Person1.Lname)End If						
  10. 以下の手順では、HashTable コレクションに格納されているアイテムを列挙します。
    1. Form1 上にボタン コントロールを作成し、Text プロパティを Enumerate に変更します。
    2. ボタンをダブルクリックしてコード ウィンドウを開き、Button4_Click イベントに以下のコードを貼り付けます。
      Dim Enumerator As IDictionaryEnumeratorEnumerator = MyTable.GetEnumerator()If (MyTable.Count = 0) Then     MessageBox.Show("The HashTable is empty")Else     MessageBox.Show("Enumerating through the HashTable collection")     While Enumerator.MoveNext()          MessageBox.Show(Enumerator.Value.ToString())     End WhileEnd IfDim MyKeys As ICollectionDim Key As ObjectIf (MyTable.Count = 0) Then     MessageBox.Show("The HashTable is empty")Else     MessageBox.Show("Accessing keys property to return keys collection")     MyKeys = MyTable.Keys()     For Each Key In MyKeys          MessageBox.Show(Key.ToString)     NextEnd If 							
      このコードでは、IDictionaryEnumerator 型の変数を宣言し、HashTable コレクションの GetEnumerator メソッドを呼び出します。返された Enumerator によってコレクション内のアイテムを列挙し、HashTable の Keys メソッドを使用してキーを列挙します。
  11. 以下の手順では、Clear メソッドを使用して HashTable をクリアします。
    1. Form1 にボタン コントロールを追加し、Text プロパティを Clear に変更します。
    2. ボタンをダブルクリックし、Button5_Click イベントに以下のコードを貼り付けます。
      MyTable.Clear()MessageBox.Show("HashTable is now empty")						
  12. 以下の手順に従って、アプリケーションをビルドして実行します。
    1. [Add Items] ボタンをクリックします。HashTable コレクションに 3 つの Person オブジェクトが追加されます。
    2. [Get Items] ボタンをクリックします。インデクサが HashTable コレクション内のアイテムを取得します。新しく追加された 3 つのアイテムが表示されます。
    3. [Remove Item] ボタンをクリックします。"Berge" というキーの場所にあるアイテムが削除されます。
    4. [Enumerate] ボタンをクリックします。IDictionaryEnumerator によって、HashTable コレクション内のアイテムが列挙されます。
    5. [Clear] ボタンをクリックします。HashTable コレクションからすべてのアイテムがクリアされます。
: ここに記載されている企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、およびイベントの例は架空のものです。実在の企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、またはイベントとの関連を示唆するものではありません。

先頭に戻る
try...catch
プロパティ

文書番号:307933 - 最終更新日: 02/20/2007 06:43:00 - リビジョン: 3.3

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbhowtomaster kbvs2005applies kbvs2005swept KB307933
フィードバック