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

C#でタプルのHashCode(ハッシュコード)を取得する方法

C#では、Tupleクラスのインスタンスに対してGetHashCode()メソッドを呼び出すことで、そのタプルのハッシュコードを取得できます。ハッシュコードはタプルの各要素の値に基づいて計算される整数値であり、同じ要素を持つタプルは必ず同じハッシュコードを返します。

以下のコードで、実際にタプルのハッシュコードを取得する方法を見てみましょう。

例1:入れ子のタプルを含む場合

using System;

public class Demo {
   public static void Main(String[] args){
      var tuple1 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(50, 100));
      var tuple2 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(100, 200));

      Console.WriteLine("Is Tuple1 equal to Tuple2? = " + tuple1.Equals(tuple2));
      Console.WriteLine("HashCode of Tuple1 = " + tuple1.GetHashCode());
      Console.WriteLine("HashCode of Tuple2 = " + tuple2.GetHashCode());
   }
}

出力結果

Is Tuple1 equal to Tuple2? = False
HashCode of Tuple1 = 4621968
HashCode of Tuple2 = 4623530

この例では、tuple1とtuple2の最初の7つの要素は同じですが、8番目に入れ子になったタプル((50, 100) と (100, 200))が異なっています。そのため、Equals()メソッドはFalseを返し、それぞれ異なるハッシュコードが生成されます。

例2:同一の値を持つタプルの場合

次に、まったく同じ要素を持つ2つのタプルの例を見てみましょう。

using System;

public class Demo {
   public static void Main(String[] args){
      var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);
      var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500);

      Console.WriteLine("Is Tuple1 equal to Tuple2? = " + tuple1.Equals(tuple2));
      Console.WriteLine("HashCode of Tuple1 = " + tuple1.GetHashCode());
      Console.WriteLine("HashCode of Tuple2 = " + tuple2.GetHashCode());
   }
}

出力結果

Is Tuple1 equal to Tuple2? = True
HashCode of Tuple1 = 3231587
HashCode of Tuple2 = 3231587

このように、すべての要素が等しいタプル同士はEquals()メソッドでTrueと判定され、GetHashCode()も同一の値を返します。これは、DictionaryHashSetなどのハッシュベースのコレクションでタプルをキーとして扱う際に重要となる特性です。等しいオブジェクトは同じハッシュコードを持つ必要があるためです。

補足:ValueTupleの場合

C# 7.0以降で利用可能なValueTuple((1, 2, 3)のようなタプル構文)でも、同様にGetHashCode()メソッドを呼び出してハッシュコードを取得できます。パフォーマンス面で優れるValueTupleの利用も検討してみてください。

  1. Windowsのタスクバーから「Get Windows 10」アイコンを削除する3つの方法

    Windows 10のリリースが間近に迫り、多くのユーザーが待ち望んでいます。新バージョンには、Windows HelloやCortana、新しいEdgeブラウザなど魅力的な機能が搭載され、評判の悪かったスタート画面も改善されました。さらに、Windows 7以降のユーザーなら無償でアップグレードでき、リリース日も7月29日に決定済みです。リリース日が近づくにつれ、Windows 7やWindows 8のユーザーのほとんどが、タスクバーに表示される「無料アップグレードを予約する」という新しいアイコンを目にしていることでしょう。 しかし、このタスクバーアイコンには厄介な点があります。アップグレ

  2. C#でタプルの6番目の要素を取得する方法【Item6プロパティの使い方】

    C#のタプル(Tuple)から6番目の要素を取得するには、Item6プロパティを使用します。System名前空間のTupleクラスは、Item1からItem7までの読み取り専用プロパティを持っており、それぞれ対応する位置の要素にアクセスできます。 例1:Item6プロパティで6番目の要素を取得する 次のコードでは、Tuple.Createメソッドで7つの要素を持つタプルを2つ作成し、Equalsメソッドによる等価性の確認、GetHashCodeメソッドによるハッシュコードの取得を行った後、Item6プロパティで6番目の要素を取り出しています。 using System; public clas