我需要在没有给出密钥的情况下将数字0-100000分配给哈希。
Ruby使用Murmur作为哈希函数。如何在没有键的情况下添加值,比如在C中,让它处理碰撞和其他事情。可能吗?我可以只给哈希值,让它评估密钥,然后插入自己吗?
在正常的散列操作中,我们有一个散列函数和一个表。我们使用value作为哈希函数的参数,然后我们得到一个键作为回报。该值将插入表中的键位置(如果发生冲突,则使用双重哈希或其他内容)。
是否可以在Ruby中执行相同类型的散列?还是我坚持默认方式?我可以将值抛出到函数中,然后计算密钥,然后将值插入哈希表吗?
答案 0 :(得分:1)
使用计算的密钥哈希值存储到哈希值中,而不是密钥本身:
hash[hash_func(key)] = value
也就是说,而不是映射key
- >直接value
,此地图hash_func(key)
- >值。实现可以在内部通过另一个哈希函数传递哈希键值,但是你不需要关心它。
然而,在评论中,现在发现您希望将哈希函数应用于值,而不是任何其他键。在这种情况下,只需使用set并完成它。然后,您需要做的就是为集合添加值:
s = Set.new
s.add(value)
没有必要计算任何东西的哈希值; Set会为你照顾它。
简而言之,这似乎是XY Problem的情况。您需要在数据结构中存储一组值(并且可能能够检查这些值是否以有效的方式存储)。你没有询问这个问题,而是询问了散列函数和表格。如果您曾询问过您真正需要什么,而不是询问您认为可以用来解决原始问题的其他内容,那么您可以更快地获得有用的答案。
答案 1 :(得分:0)
常见的解决方案是简单地将值用作键。因此:
value = "xxx"
hash[value] = 1
通过这种方式,您可以清楚地记录此特定哈希的实际值(所有1
)没有用,并且您将获得重复数据删除的值。 Hash
将在内部进行常规散列,您根本不必担心它。
我在这里使用1
作为值,但实际值完全无关紧要。我不使用nil
,因为这是hash[nonexistant_value]
的默认返回值。
如果您的价值观更为复杂,请查看http://docs.ruby-lang.org/en/2.0.0/Hash.html了解相关信息。