C# 配列で構造ハッシュを実行したいのですが、その方法がわかりません。これは、どの言語でも非常に基本的で非常に単純な質問のように思えますが、C# で機能させることはできません...
私は 383 double の配列を持っています。ハッシュすると、非常に奇妙な値が得られます
// this returns 134217728
let h = ((IStructuralEquatable) data).GetHashCode(EqualityComparer<double>.Default)
たまたまln h / ln 2 = 27
...
ハッシュ可能なものの配列の構造ハッシュコードをC#で取得するにはどうすればよいですか?
より良いイラストを編集
特に、次のコードはばかげた結果を生成します
var vala = new[] { 1f, 354652f, 3f };
var valb = new[] { 1f, 56f, 545013f };
var valc = new[] { 1f, 2584356483f, 68763948475f };
var hashA = ((IStructuralEquatable)vala).GetHashCode(EqualityComparer<float>.Default);
var hashB = ((IStructuralEquatable)valb).GetHashCode(EqualityComparer<float>.Default);
var hashC = ((IStructuralEquatable)valc).GetHashCode(EqualityComparer<float>.Default);
ハッシュは一貫してい796917760
ます。(1番で変わるみたいだけど…)
結論
結論としては、実際には、C# では構造ハッシュが壊れているだけのようです。
(もちろん、文字通り、そうではありません。他の人がほぼ一定の関数は有効なハッシュ関数であると主張しているように.....)