Erzeugen Ganzzahl, basierend auf einer gegebenen Zeichenfolge (ohne GetHashCode)

Ich bin versucht zu schreiben, eine Methode zu generieren, die eine Ganzzahl, basierend auf einer gegebenen Zeichenfolge. Beim Aufruf dieser Methode auf 2 identische strings, die ich brauche, die Methode zu generieren, die genau die gleiche integer-beide Male.

Versuchte ich mit .GetHasCode() aber das ist sehr unzuverlässig, einmal Verschiebe ich das Projekt auf einem anderen Rechner, als GetHasCode() liefert verschiedene Werte für die gleiche Zeichenfolge

Ist es auch wichtig, dass das kollisionsrisiko SEHR gering. Benutzerdefinierte Methoden, die ich geschrieben habe, bisher produzieren Kollisionen nach nur ein paar hundert tausend Datensätze.

Den hash-Wert MUSS eine ganze Zahl sein. Ein string-hash-Wert (wie md5) lahmlegen würde mein Projekt in Bezug auf die Geschwindigkeit und Aufwand zum laden.

Den integer-hashes werden verwendet, um extrem schnelle Volltextsuche, die ich an der Arbeit ist schön, aber er verlässt sich auf .GetHasCode() und funktioniert nicht wenn mehrere Maschinen zu engagieren.

Jede Einsicht würde überhaupt sehr geschätzt werden.

  • Haben Sie implementiert ein bekannter Algorithmus wie vorgeschlagen, hier?
  • Gibt es Einschränkungen bei der string-Struktur (Größe, Codierung)?
  • Es gibt keine Einschränkungen pro sagen, aber jeder gegebenen Zeichenfolge nicht mehr als Einhundert Zeichen oder so.
  • Sie wollen einen hash-code, einfach nicht .NET-Implementierung (da kann es variieren). So scheint es mir, sollten Sie recherchieren hash-code-Implementierungen, um eine zu finden, die nicht Ihren Bedürfnissen entsprechen. Wenn .NET GetHashCode() ist sonst für Ihre Bedürfnisse geeignet, man könnte sogar dekompilieren (eine version davon) und Kapseln Sie in einer privaten Umsetzung, so dass Sie wissen, es wird sich nichts ändern. Wenn das nicht funktioniert, sollten Sie Ihre Forschung zu tun und dann kommen SO mit Ihnen mit spezifischen Fragen, die vielleicht kommen.
InformationsquelleAutor mrb398 | 2014-11-11
Schreibe einen Kommentar