我已经阅读并且现在正在使用php中的关联数组作为哈希表。这是我在做什么的示例:
$bfHeroMoveHash = $this->createBattlefieldHeroMoveHash($Hero, $move);
if (isset(self::$_battlefieldHeroMoveSnapshots[$bfHeroMoveHash])) {
$this->fastForwardToSnapshot(self::$_battlefieldHeroMoveSnapshots[$bfHeroMoveHash]);
$Attack->Uses--;
} else {
$beforeMoveSnapshot = $this->getBattlefieldSnapshotBefore();
$this->performMove($move);
self::$_battlefieldHeroMoveSnapshots[$bfHeroMoveHash] = $this->getBattlefieldSnapshotAfter($beforeMoveSnapshot);
}
这很好,当我必须遍历大量数据时,在这种情况下,这可以显着提高性能(性能提高约60%)。但是,对于较小的数据集,性能会下降。我以为这是由于isset()
函数引起的,我正在使用该函数检查哈希表中是否已经存在我的哈希。
我偶然发现了php(link here)中的HashTable
结构,但是要重写我的整个代码将是一件非常艰巨的工作。 (我在脚本中的多个不同位置使用了类似的哈希表)
基本上,我将有两个问题:
HashTable
结构是否有所不同?或者是同一件事,只包装在函数中?为了详细说明我的第二个问题,我想知道,在使用哈希表时,是否有任何方法可以防止检查哈希表中是否已经存在哈希的开销?