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()も同一の値を返します。これは、DictionaryやHashSetなどのハッシュベースのコレクションでタプルをキーとして扱う際に重要となる特性です。等しいオブジェクトは同じハッシュコードを持つ必要があるためです。
補足:ValueTupleの場合
C# 7.0以降で利用可能なValueTuple((1, 2, 3)のようなタプル構文)でも、同様にGetHashCode()メソッドを呼び出してハッシュコードを取得できます。パフォーマンス面で優れるValueTupleの利用も検討してみてください。
-
Windowsのタスクバーから「Get Windows 10」アイコンを削除する3つの方法
Windows 10のリリースが間近に迫り、多くのユーザーが待ち望んでいます。新バージョンには、Windows HelloやCortana、新しいEdgeブラウザなど魅力的な機能が搭載され、評判の悪かったスタート画面も改善されました。さらに、Windows 7以降のユーザーなら無償でアップグレードでき、リリース日も7月29日に決定済みです。リリース日が近づくにつれ、Windows 7やWindows 8のユーザーのほとんどが、タスクバーに表示される「無料アップグレードを予約する」という新しいアイコンを目にしていることでしょう。 しかし、このタスクバーアイコンには厄介な点があります。アップグレ
-
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