Wikia

WoWWiki

USERAPI StringHash

Talk3
101,513pages on
this wiki

Redirected from StringHash

This page documents a user-defined function that you can copy and paste into your addon. Replace <PREFIX> with your AddOn's prefix to avoid conflicts between different versions of these functions.
User defined functions < StringHash
StringHash - by Mikk (talk · contr) -


Return a fair-quality 32-bit hash of a string

hashVal = StringHash("string")


Example Edit

> print(StringHash(""))
1 
> print(StringHash("ab"))
3458343178
> print(StringHash("ba"))
3466747145
> print(StringHash("AB"))
2653593770
> print(StringHash("BA"))
2661997737
> print(StringHash("The quick brown fox jumps over the lazy dog"))
3402772626

DetailsEdit

  • This algorithm is ~30% faster than a Lua implementation of the Java String.hashCode library call
  • The bit transmutation patterns and resulting collision rates are MUCH better than the results from the Java hash

CodeEdit

local function StringHash(text)
  local counter = 1
  local len = string.len(text)
  for i = 1, len, 3 do 
    counter = math.fmod(counter*8161, 4294967279) +  -- 2^32 - 17: Prime!
  	  (string.byte(text,i)*16776193) +
  	  ((string.byte(text,i+1) or (len-i+256))*8372226) +
  	  ((string.byte(text,i+2) or (len-i+256))*3932164)
  end
  return math.fmod(counter, 4294967291) -- 2^32 - 5: Prime (and different from the prime in the loop)
end

Around Wikia's network

Random Wiki