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

C#で文字列のハッシュコード(HashCode)を取得する方法

C#で文字列のハッシュコードを取得するには、GetHashCode()メソッドを使用します。このメソッドは、文字列の内容に基づいて整数値(int型)のハッシュコードを返します。ハッシュコードは、辞書(Dictionary)やハッシュセット(HashSet)などのハッシュベースのコレクションで、オブジェクトを高速に検索・比較するために利用されます。

基本的な使い方

以下の例では、2つの異なる文字列に対してGetHashCode()メソッドを呼び出し、それぞれのハッシュコードと等価性の判定結果を出力しています。

using System;
public class Demo {
   public static void Main(String[] args) {
      string str1 = "Akon";
      string str2 = "Eminem";
      Console.WriteLine("文字列1 = "+str1);
      Console.WriteLine("文字列1のハッシュコード = "+str1.GetHashCode());
      Console.WriteLine("文字列2 = "+str2);
      Console.WriteLine("文字列2のハッシュコード = "+str2.GetHashCode());
      Console.WriteLine("文字列1と文字列2は等しいか: {0}", str1.Equals(str2));
   }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

文字列1 = Akon
文字列1のハッシュコード = 416613838
文字列2 = Eminem
文字列2のハッシュコード = 40371907
文字列1と文字列2は等しいか: False

この例では、「Akon」と「Eminem」は異なる文字列であるため、それぞれ異なるハッシュコードが生成され、Equals()メソッドによる比較結果もFalseになっています。

同じ内容の文字列の場合

続いて、同じ内容の文字列を比較した場合の動作を見てみましょう。

using System;
public class Demo {
   public static void Main(String[] args) {
      string str1 = "Imagine Dragons";
      string str2 = "Imagine Dragons";
      Console.WriteLine("文字列1 = "+str1);
      Console.WriteLine("文字列1のハッシュコード = "+str1.GetHashCode());
      Console.WriteLine("文字列2 = "+str2);
      Console.WriteLine("文字列2のハッシュコード = "+str2.GetHashCode());
      Console.WriteLine("文字列1と文字列2は等しいか: {0}", str1.Equals(str2));
   }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

文字列1 = Imagine Dragons
文字列1のハッシュコード = -1546868095
文字列2 = Imagine Dragons
文字列2のハッシュコード = -1546868095
文字列1と文字列2は等しいか: True

同じ内容を持つ文字列は、必ず同じハッシュコードを返します。これはハッシュコードの重要な性質です。ただし、逆に「異なる文字列が必ず異なるハッシュコードになる」とは限らず、まれに異なる文字列が同じハッシュコードを持つこと(ハッシュ衝突)もあります。

注意点

.NET Core以降では、セキュリティ上の理由から、アプリケーションの実行ごとに文字列のハッシュコード値が変わる可能性があります。そのため、ハッシュコードをデータベースへの保存やファイルへの永続化などには使用せず、あくまで同一プロセス内でのデータ構造(DictionaryやHashSetなど)での高速な比較・検索目的で使用することが推奨されています。

  1. Matplotlib PyplotでフィギュアのAxes(軸)リストを取得する方法

    MatplotlibのPyplotを使ってフィギュアに含まれるAxes(軸)のリストを取得するには、まずフィギュアを作成し、その後get_axes()メソッドを呼び出すことで、フィギュア内のすべてのAxesオブジェクトを取得できます。取得したAxesに対して、ラベルの設定などの操作を行うことが可能です。手順NumPyを使ってデータ点 xs と ys を作成し、figure()メソッドで新しいフィギュア(または既存のフィギュア)を生成します。add_subplot()メソッドを使用して、サブプロット配置の一部としてフィギュアにAxesオブジェクトを追加します。ここでは nrows=1、ncols

  2. iOS 14で広告識別子(IDFA)を取得する方法【App Tracking Transparency対応ガイド】

    この記事のタイトルに心当たりがあるなら、iOS 14がもたらした「激震」についてすでにご存じかもしれません。iOS 14のリリースに伴い、アプリがユーザー情報を収集する方法に大きな変更が加えられました。そのひとつが、広告識別子(IDFA:Identifier For Advertisers)へのアクセス方法に関するものです。IDFAをよく知らない方のために、まずはIDFAとは何か、なぜ重要なのかを説明します。IDFAとは?iOSデバイスのユーザーは、広告会社によるトラッキングを許可するかどうかを自分で決めることができます。許可した場合、広告会社はユーザーの閲覧履歴などをもとに、そのユーザーに合