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

文書翻訳 文書翻訳
文書番号: 307933 - 対象製品
この記事は、以前は次の 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 Function
    End 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 IDictionaryEnumerator
      Enumerator = 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 While
      End If
      
      Dim MyKeys As ICollection
      Dim Key As Object
      
      If (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)
           Next
      End 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 コレクションからすべてのアイテムがクリアされます。
: ここに記載されている企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、およびイベントの例は架空のものです。実在の企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、またはイベントとの関連を示唆するものではありません。

プロパティ

文書番号: 307933 - 最終更新日: 2007年2月20日 - リビジョン: 3.3
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
キーワード:?
kbhowtomaster kbvs2005applies kbvs2005swept KB307933
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com