|
|
1
2
您可以定义自己的类继承自
基于调用代码所需的哈希接口的其他方法,您可能需要重写其他方法。
除此之外,我不认为在哈希中提供查找键时返回1的行为是非常类似哈希的行为。我宁愿退赛。返回1将违反最小意外原则。 OP评论后添加
使用方法如下:
展开以显示哈希实现
|
|
|
2
0
这可能不是最好的答案,但我认为它可以帮助你
对每个对象使用模块
替换原始哈希类
|
|
|
3
0
|
|
|
4
0
对于用户创建的类型,哈希查找使用两种方法
但使用哈希而不是其他数据类型的原因是,无论有多少数据,查找密钥所需的时间通常不会增长。但在上面的实现中,我们打破了这一点。让我们看看散列是如何工作的。在后台,您的数据大致是这样存储的 :
每个对象都存储在同一个存储桶中,因此我们破坏了哈希查找性能。定义自定义散列方法时,您需要一些每次计算时都相同并且看起来随机的东西,以便模运算将数据均匀分布在各个存储桶中。但是哈希方法还必须尊重
您所要求的问题是,可以构造一系列查找,其中每个字符串彼此相等。“foo”=“boo”。“boo”=“bao”。“bao”=“bar”。为了使程序尊重您对等式的定义,所有这些字符串都需要位于同一个哈希桶中。这意味着为了使哈希按您描述的方式运行 每个字符串 需要具有相同的哈希桶。根据定义,这不是真正的散列。所以我认为你应该退后一步,考虑一下你要解决的是什么问题,以及散列是否真的是正确的方法。 你当然可以按照乌尔弗茨的建议去做,但代价是使用更多的内存
:包含少量项的Ruby哈希实际上是作为数组实现的,至少在MRI中是这样。希望这些图有助于解释哈希表在高级别上的工作方式,而不是实际显示给定Ruby是如何实现它们的。我确信它们有很多不准确之处。 |
|
|
AlwaysneedsHelp · 如何减少此处使用的内存量? 2 年前 |
|
|
snake123 · 滚动到不同页面的锚点,URL中没有# 2 年前 |
|
|
Jan · 密码salt是否应存储在数据库中 2 年前 |
|
|
birb · RFC-6238 TOTP实现与示例不匹配 3 年前 |
|
|
AishaWho · 请解释res=id^(id>>>32) 3 年前 |
|
|
landings · 如何散列整数的环形缓冲区? 3 年前 |