Я читал и сейчас использую ассоциативные массивы в 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()
функция, с помощью которой я проверяю, присутствует ли мой хэш в хеш-таблице или нет.
Я наткнулся на HashTable
структура в php (ссылка здесь), но переписать весь мой код к этому, было бы очень большой работой. (Я использую хэш-таблицы simmilar в разных местах в моем скрипте)
В принципе, у меня было бы два вопроса:
HashTable
структура чем-то отличается от базовых php-ассоциативных массивов, или это то же самое, только красиво обернутые в функции?Чтобы немного подробнее остановиться на моем втором вопросе, что я хотел бы знать, есть ли способ предотвратить накладные расходы на проверку, если хеш-таблица уже существует в хеш-таблице, при их использовании?
Задача ещё не решена.
Других решений пока нет …