C#
 Computer >> コンピューター >  >> プログラミング >> C#

【C#】Hashtableを反復処理するための列挙子(Enumerator)を取得する方法

C#のHashtableを反復処理するための列挙子(Enumerator)を取得するには、GetEnumerator()メソッドを使用します。このメソッドはIDictionaryEnumerator型のオブジェクトを返し、MoveNext()メソッドを呼び出しながら各要素のキー(Key)と値(Value)に順番にアクセスできます。

基本的な使い方

以下の例では、10個のキーと値のペアを持つHashtableを作成し、まずforeachループで内容を表示した後、GetEnumerator()メソッドで取得した列挙子を使って反復処理を行っています。

using System;
using System.Collections;
public class Demo {
   public static void Main(){
      Hashtable hash = new Hashtable(10);
      hash.Add("1", "A");
      hash.Add("2", "B");
      hash.Add("3", "C");
      hash.Add("4", "D");
      hash.Add("5","E");
      hash.Add("6", "F");
      hash.Add("7", "G");
      hash.Add("8","H");
      hash.Add("9", "I");
      hash.Add("10", "J");
      Console.WriteLine("Hashtable Key and Value pairs...");
      foreach(DictionaryEntry entry in hash){
         Console.WriteLine("{0} and {1} ", entry.Key, entry.Value);
      }
      Console.WriteLine("Is the Hashtable having fixed size? = "+hash.IsFixedSize);
      Console.WriteLine("Count of entries in Hashtable = "+ hash.Count);
      Console.WriteLine("\nEnumerator to iterate through the Hashtable...");
      IDictionaryEnumerator demoEnum = hash.GetEnumerator();
      while (demoEnum.MoveNext())
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      hash.Clear();
   }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Hashtable Key and Value pairs...
10 and J
1 and A
2 and B
3 and C
4 and D
5 and E
6 and F
7 and G
8 and H
9 and I
Is the Hashtable having fixed size? = False
Count of entries in Hashtable = 10 

Enumerator to iterate through the Hashtable...
Key = 10, Value = J
Key = 1, Value = A
Key = 2, Value = B
Key = 3, Value = C
Key = 4, Value = D
Key = 5, Value = E
Key = 6, Value = F
Key = 7, Value = G
Key = 8, Value = H
Key = 9, Value = I

ポイント解説

  • GetEnumerator():Hashtableの要素を走査するためのIDictionaryEnumeratorを返します。
  • MoveNext():列挙子を次の要素へ進めます。次の要素が存在する場合はtrue、末尾に達した場合はfalseを返します。
  • Key / Value プロパティ:現在位置しているエントリのキーと値をそれぞれ取得できます。
  • IsFixedSize:Hashtableが固定サイズかどうかを示すbool値を返します。通常のHashtableではfalseになります。

なお、Hashtableは内部的にハッシュテーブル構造を採用しているため、要素の順序は挿入順とは限りません。出力結果でもキー「10」が最初に表示されている点に注意してください。

別の例

文字列のキーを使用した別の例を見てみましょう。

using System;
using System.Collections;
public class Demo {
   public static void Main(){
      Hashtable hash = new Hashtable(10);
      hash.Add("One", "A");
      hash.Add("Two", "B");
      hash.Add("Three", "C");
      hash.Add("Four", "D");
      hash.Add("Five","E");
      hash.Add("Six", "F");
      Console.WriteLine("Hashtable Key and Value pairs...");
      Console.WriteLine("\nEnumerator to iterate through the Hashtable...");
      IDictionaryEnumerator demoEnum = hash.GetEnumerator();
      while (demoEnum.MoveNext())
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      hash.Clear();
   }
}

実行結果

このコードを実行すると、次の出力が生成されます。

Hashtable Key and Value pairs...
Enumerator to iterate through the Hashtable...
Key = One, Value = A
Key = Five, Value = E
Key = Three, Value = C
Key = Two, Value = B
Key = Four, Value = D
Key = Six, Value = F

このように、GetEnumerator()メソッドとIDictionaryEnumeratorを組み合わせることで、Hashtable内のすべてのキーと値のペアを簡単に反復処理できます。最後にClear()メソッドを呼び出して、Hashtableの全要素を削除している点にも注目してください。

  1. C#でStringCollectionを反復処理する列挙子(Enumerator)を取得する方法

    StringCollectionを反復処理するための列挙子(Enumerator)を取得するには、GetEnumerator()メソッドを使用します。このメソッドはStringEnumerator型のオブジェクトを返し、MoveNext()とCurrentを組み合わせることで、コレクション内の各要素に順番にアクセスできます。基本的な使い方まずは、配列の要素をStringCollectionに追加し、列挙子を使って反復処理する例を見てみましょう。using System; using System.Collections.Specialized; public class Demo { &nbs

  2. C#のHashtableクラスにおけるItemプロパティとは?基本的な使い方を解説

    HashtableクラスのItemプロパティとは C#のHashtableクラスにおけるItemプロパティは、指定したキーに関連付けられた値を取得または設定するためのプロパティです。C#ではインデクサとして実装されているため、ht[key]というシンプルな形式で直感的にアクセスできます。 このプロパティの大きな特徴は、既存要素の読み書きだけでなく、新しい要素の追加にも利用できる点です。 存在しないキーで新規要素を追加する方法 指定したキーがHashtable内にまだ存在しない場合でも、次のように代入文を書くだけで、そのキーと値が新しい要素として自動的に登録されます。 myCollection