是否可以通过提供的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
答案 0 :(得分:8)
否。
从根本上讲,这在算法上是不可能的。
根据设计,哈希运算是推测的:多个元素可以哈希为相同的值。因此,任何HashMap实现都只能将哈希用作提示,然后必须使用完全相等比较来检查提示是正确的元素(或不是正确的元素)。
在 best 处,get_by_hash
方法将返回与当前哈希匹配的所有可能元素中的Iterator
。
对于简并的情况,请考虑始终返回4
(通过掷骰子获得)的哈希算法。您希望它返回哪个元素?
解决方法
如果您要使用缓存,那么在没有HashBuilder
的语言中,窍门是预先对密钥本身中的哈希进行哈希处理(并缓存)。
它需要缓存完整密钥(由于相等检查),但是哈希运算是一个非常简单的操作(返回缓存的值)。
但是,它不会加快相等性检查的速度,这取决于该值可能会非常昂贵。
您可以使模式适应Rust,尽管您会失去使用HashBuilder
的优势。