Ruby中的哈希(Hash)仅使用其哈希值(对于字符串和数字)。在内部,它使用Murmur哈希函数。我想知道鉴于两个不同键具有相同哈希值的概率不为零,如何实现哈希。
class ExampleHash
include Enumerable
def initialize
@size = 9
@slots = Array.new(@size) { [ ] }
end
def [](key)
@slots[key.hash % @size].each do |entry|
if (entry[0] == key)
return entry[1]
end
end
nil
end
def []=(key, value)
entries = @slots[key.hash % @size]
entries.each do |entry|
if (entry[0] == key)
entry[1] = value
return
end
end
entries << [ key, value ]
end
end
这很容易实现,因为Ruby中的每个对象都有一个内置的hash
方法,它可以生成一个基于对象内容的大数值。