![]() |
1
2
您可以定义自己的类继承自
基于调用代码所需的哈希接口的其他方法,您可能需要重写其他方法。
除此之外,我不认为在哈希中提供查找键时返回1的行为是非常类似哈希的行为。我宁愿退赛。返回1将违反最小意外原则。 OP评论后添加
使用方法如下:
展开以显示哈希实现
|
![]() |
2
0
这可能不是最好的答案,但我认为它可以帮助你
对每个对象使用模块
替换原始哈希类
|
![]() |
3
0
|
![]() |
4
0
对于用户创建的类型,哈希查找使用两种方法
但使用哈希而不是其他数据类型的原因是,无论有多少数据,查找密钥所需的时间通常不会增长。但在上面的实现中,我们打破了这一点。让我们看看散列是如何工作的。在后台,您的数据大致是这样存储的 :
每个对象都存储在同一个存储桶中,因此我们破坏了哈希查找性能。定义自定义散列方法时,您需要一些每次计算时都相同并且看起来随机的东西,以便模运算将数据均匀分布在各个存储桶中。但是哈希方法还必须尊重
您所要求的问题是,可以构造一系列查找,其中每个字符串彼此相等。“foo”=“boo”。“boo”=“bao”。“bao”=“bar”。为了使程序尊重您对等式的定义,所有这些字符串都需要位于同一个哈希桶中。这意味着为了使哈希按您描述的方式运行 每个字符串 需要具有相同的哈希桶。根据定义,这不是真正的散列。所以我认为你应该退后一步,考虑一下你要解决的是什么问题,以及散列是否真的是正确的方法。 你当然可以按照乌尔弗茨的建议去做,但代价是使用更多的内存
:包含少量项的Ruby哈希实际上是作为数组实现的,至少在MRI中是这样。希望这些图有助于解释哈希表在高级别上的工作方式,而不是实际显示给定Ruby是如何实现它们的。我确信它们有很多不准确之处。 |
![]() |
Jahongir Rahmonov · 计算文件的校验和 7 年前 |
![]() |
Lev Knoblock · 类哈希函数 7 年前 |
![]() |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 7 年前 |
![]() |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 7 年前 |
![]() |
OofYeetMcGee · 实现PBKDF2 7 年前 |
![]() |
yibs · 如何在Perl中计算csv中具有相同id的项目数 7 年前 |