我可以直接在HashMap中使用哈希吗?

时间:2018-07-03 10:21:12

标签: rust

是否可以通过提供的HashMap直接在Hash中插入值或从中获取值,以便我可以缓存哈希?

我想做这样的事情:

$groupValues = array();
foreach ($prodCollection as $prod) {
    $catCollection = getModel()...; //$prod i need it in my collection
    foreach ($catCollection as $col) {
        array_push($groupValues, $colt->getId());
        var_dump($col->getId());
    }
} 

var_dump(array_unique($groupValues)); // return 5510

playground

1 个答案:

答案 0 :(得分:8)

否。

从根本上讲,这在算法上是不可能的。

根据设计,哈希运算是推测的:多个元素可以哈希为相同的值。因此,任何HashMap实现都只能将哈希用作提示,然后必须使用完全相等比较来检查提示是正确的元素(或不是正确的元素)。

best 处,get_by_hash方法将返回与当前哈希匹配的所有可能元素中的Iterator

对于简并的情况,请考虑始终返回4(通过掷骰子获得)的哈希算法。您希望它返回哪个元素?


解决方法

如果您要使用缓存,那么在没有HashBuilder的语言中,窍门是预先对密钥本身中的哈希进行哈希处理(并缓存)。

它需要缓存完整密钥(由于相等检查),但是哈希运算是一个非常简单的操作(返回缓存的值)。

但是,它不会加快相等性检查的速度,这取决于该值可能会非常昂贵。

您可以使模式适应Rust,尽管您会失去使用HashBuilder的优势。