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

C#でHashtableの指定したキーのハッシュコードを取得する方法

C#のHashtableクラスでは、GetHashメソッドを使うことで、指定されたキーに対応するハッシュコードを取得できます。ただし、このメソッドはprotectedとして定義されているため、外部から直接呼び出すことはできません。そこで、Hashtableを継承した独自クラスを作成し、その中から呼び出すのが一般的な手法です。

以下に、実際のコード例と実行結果を紹介します。

例1:文字列キーのハッシュコードを取得する

using System;
using System.Collections;

public class HashCode : Hashtable {
   public static void Main(string[] args) {
      HashCode hash = new HashCode();
      hash.Add("A", "Jacob");
      hash.Add("B", "Mark");
      hash.Add("C", "Tom");
      hash.Add("D", "Nathan");
      hash.Add("E", "Tim");
      hash.Add("F", "John");
      hash.Add("G", "Gary");

      Console.WriteLine("Key and Value pairs...");
      foreach(DictionaryEntry entry in hash) {
         Console.WriteLine("{0} and {1}", entry.Key, entry.Value);
      }

      Console.Write("HashCode for key D = " + (hash.GetHash("D")));
  }
}

出力結果

Key and Value pairs...
G and Gary
A and Jacob
B and Mark
C and Tom
D and Nathan
E and Tim
F and John
HashCode for key D = -842352676

コードのポイント

  • HashCodeクラスはHashtableを継承しているため、protectedなGetHashメソッドを呼び出せます。
  • foreachループではDictionaryEntry構造体を使って、格納されているすべてのキーと値のペアを順番に取り出しています。
  • Hashtableは要素の並び順を保証しないため、追加した順序とは異なる順序で表示される点に注意してください。

例2:char型キーのハッシュコードを取得する

次に、キーとしてchar型を使用した例を見てみましょう。

using System;
using System.Collections;

public class HashCode : Hashtable {
   public static void Main(string[] args) {
      HashCode hash = new HashCode();
      hash.Add('1', "One");
      hash.Add('2', "Two");
      hash.Add('3', "Three");
      hash.Add('4', "Four");

      Console.WriteLine("Key and Value pairs...");
      foreach(DictionaryEntry entry in hash) {
         Console.WriteLine("{0} and {1}", entry.Key, entry.Value);
      }

      Console.WriteLine("HashCode for key 1 = " + (hash.GetHash('1')));
      Console.WriteLine("HashCode for key 2 = " + (hash.GetHash('2')));
      Console.WriteLine("HashCode for key 3 = " + (hash.GetHash('3')));
      Console.WriteLine("HashCode for key 4 = " + (hash.GetHash('4')));
  }
}

出力結果

Key and Value pairs...
3 and Three
2 and Two
4 and Four
1 and One
HashCode for key 1 = 3211313
HashCode for key 2 = 3276850
HashCode for key 3 = 3342387
HashCode for key 4 = 3407924

補足

  • GetHash(object key)は、引数として渡されたキーオブジェクトのGetHashCode()の結果をもとにハッシュコードを返します。
  • 同じキーに対しては常に同じハッシュコードが返されますが、異なるキーが同じハッシュコードを持つ可能性(衝突)もあります。
  • 新しい開発では、非ジェネリックなHashtableよりも型安全なDictionary<TKey, TValue>の使用が推奨されています。
  1. C#でInt64インスタンスのハッシュコードを取得する方法

    C#の Int64.GetHashCode() メソッドを使うと、現在のInt64(long型)インスタンスに対応するハッシュコードを取得できます。このメソッドは、ハッシュテーブルなどのデータ構造で値を効率的に管理する際に利用されます。GetHashCode()メソッドの基本GetHashCode()は、オブジェクトの値をもとに計算された32ビット整数のハッシュコードを返します。同じ値を持つInt64インスタンスは必ず同じハッシュコードを返しますが、異なる値が同じハッシュコードになる場合もあります(ハッシュの衝突)。サンプルコード1以下の例では、2つのlong型の値に対してハッシュコードを取得

  2. 【C#】Hashtableに特定のキーが含まれているか確認する方法(ContainsKeyメソッド)

    C#のHashtable(ハッシュテーブル)に特定のキーが存在するかどうかを確認するには、ContainsKey()メソッドを使用します。このメソッドは、指定したキーがHashtable内に存在すれば true、存在しなければ false を返します。キーの存在チェックは、値を取得する前のエラー防止などによく使われる基本的な操作です。サンプルコード1以下の例では、文字列のキーと値を持つHashtableを作成し、ContainsKey()メソッドでキー「Seven」が存在するかどうかを確認しています。using System; using System.Collections; public