に基づいて一意のハッシュコードを生成します。一見は、私は、次の2つの文字列持つ文字列
var string1 = "MHH2016-05-20MASTECH HOLDINGS, INC. Financialshttp://finance.yahoo.com/q/is?s=mhhEDGAR Online FinancialsHeadlines";
var string2 = "CVEO2016-06-22Civeo upgraded by Scotia Howard Weilhttp://finance.yahoo.com/q/ud?s=CVEOBriefing.comHeadlines";
をこれら2つの文字列がしかし、彼らのハッシュコードはGetHashCode method
を使用して同じである異なっています。
var hash = 0;
var total = 0;
foreach (var x in string1) //string2
{
//hash = x * 7;
hash = x.GetHashCode();
Console.WriteLine("Char: " + x + " hash: " + hash + " hashed: " + (int) x);
total += hash;
}
合計で、両方の文字列が620438779になります。よりユニークなハッシュコードを返す別のメソッドがありますか?文字列の文字に基づいて一意になるようにhashcodeが必要です。両方の文字列が異なっていて、コードが適切に動作していますが、これらの2つの文字列は同じようになります。このコードをよりユニークにするためにこのコードを改善するにはどうすればよいですか?
可能なすべての文字列に対してユニークなハッシュコードを保証することはできません。ハッシュコードは32ビットであり、可能な値は40億(および変更可能)です。あなたの2つの文字列はそれぞれ120文字以上です。 96文字の印刷可能なASCII文字を使用する可能性のある120文字の文字列の数は、はるかに多くなります。衝突は避けられない。 *一般的なケースでは一意のハッシュコード*は存在しません。ハッシュコードを大きくすると衝突の可能性は低くなりますが、ハッシュコードを排除することはできません。 –
あなたの質問は、あなたが一意の識別子としてハッシュコードを使用しようとしていることを意味しています。これは信じられないほど悪い考えであり、失敗することになります。 @AlexDの答えがなぜその理由を説明します。 –
@JimMischelはい私はこれを今気付いていますが、ありがとう –