8

GetHashCode()関数がコード which を使用して何かを返す場合、特別な意味がありcontains ^ symbolますか?

public class ClassProp
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
    public int Prop3 { get; set; }
    public int Prop4 { get; set; }
    public int Prop5 { get; set; }

    public override int GetHashCode()
    {
        return Prop1.GetHashCode() ^ Prop2.GetHashCode() ^ 
               Prop3.GetHashCode() ^ Prop4.GetHashCode() ^ Prop5.GetHashCode();
    }
}
4

5 に答える 5

7

^C# のXOR 演算子です。それについて「特別」なことは何もありません。すべてのクラス プロパティのハッシュ コードが XOR されているだけです。

編集:GetHashCode複雑なオブジェクトの簡略識別子として使用される汎用コードを返します。一般的な用途は、オブジェクトを格納し、ハッシュ コードに基づいてオブジェクトをすばやく取得する場合に、データ構造をハッシュすることです。Person対応するハッシュ コードを持つクラスといくつかのオブジェクトを想定します。

Alex 8540
John 9435
Peter 2453

これらのコードは、各オブジェクトの一部またはすべてのフィールドに基づいて生成され、効率的なハッシュを確保するために衝突をできるだけ少なくする必要があります。これで、ハッシュ コードを使用してオブジェクトをハッシュ テーブルに格納できます。

Entries
0 -> Alex
1 -> John
2 -> Peter

オブジェクトは、それぞれのハッシュ コードを使用してテーブル内に格納され、位置が決定されます。次に、同じハッシュ コードを使用して簡単に取得できます。

SO の投稿で説明するには少し多すぎるため、ハッシュ テーブルのしくみに関する文献を見つけることをお勧めします。

于 2012-05-22T16:08:04.913 に答える
4

それは単なるビット単位の xor 演算子です。異なるオブジェクトのハッシュ コードを 1 つの全体的なハッシュ コードに結合するためによく使用されます。

これは、Google で検索するのが最も簡単なことの 1 つではありません。そのようなものを検索するときのヒントは、すべての演算子の表を見ることです。

于 2012-05-22T16:07:54.160 に答える
4

それがビット単位のXOR 演算子です。

これは、実装時に使用される非常に一般的な演算子GetHashCodeです。

そうは言っても、この場合、その実装は理想的ではないかもしれません。XOR (単独) を使用する際の問題は、必ずしも衝突の可能性を減らしていないことです。問題は、クラスが次のように定義されていることです。

class Foo
{
    public int Bar { get; set; }
    public int Baz { get; set; }

    // ...
    public override int GetHashCode()
    {  return this.Bar.GetHashCode() ^ this.Baz.GetHashCode(); }
}

Bar==2 かつ Baz==4 の場合、Bar==4 および Baz==2 の場合と同じハッシュ コードを作成します。ユース ケースによっては、これによりハッシュの競合が増える可能性があるため、GetHashCode を実装する際には注意が必要です。また、このような変更可能な型を作成するときは、ハッシュ コードの実装が等価チェックなどと一致するように十分注意する必要があります。

于 2012-05-22T16:12:33.673 に答える
2

ビット単位の XOR 演算子は次のように機能します。

A = 10111 B = 01010

A^B=11101

対応するビットが異なると 1 になり、同様のビットは 0 になります。

あなたの場合、これらの整数は最初にバイナリに変換され、次に上記の例のように処理されます。

于 2012-05-22T16:09:45.770 に答える
0

^C# の XOR 演算子の場合は、こちらを参照してください: http://msdn.microsoft.com/en-us/library/zkacc7k1.aspx

あなたの例が行っているのは、そのプロパティからハッシュコードを XOR することだけです。

于 2012-05-22T16:08:42.547 に答える