Quiero cortar una cadena de longitud de hasta 30. Cuál será la mejor idea para hacer eso si el tiempo es mi problema. La función se llamará más de 100 millones de veces. Actualmente estoy usando el siguiente código,Una función hash rápida para una cadena en C#
static UInt64 CalculateHash(string read, bool lowTolerance)
{
UInt64 hashedValue = 0;
int i = 0;
while (i < read.Length)
{
hashedValue += read.ElementAt(i) * (UInt64)Math.Pow(31, i);
if (lowTolerance) i += 2;
else i++;
}
return hashedValue;
}
¿Hay algún motivo por el que el método 'Object.GetHashCode()' no funcione para usted? Parece que estás reimplementando el mismo concepto. –
Cualquier cosa que no use * matemática de punto flotante * será más rápida. –
GetHashCode no es persistente, por lo que si necesita almacenar el código hash en una base de datos, no es útil. Por otra parte, tampoco es esto. ¿Cuál es tu uso? ¿Solo necesita manipular la cadena en tiempo de ejecución, o qué debe hacer con el Hash? Adler-32 podría ser una opción si necesita almacenarlo y no encontrarse con demasiadas colisiones. –