Использование хеш-таблиц в php - PullRequest
0 голосов
/ 14 января 2019

Я читал и сейчас использую ассоциативные массивы в 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 ( ссылка здесь ), но переписать весь мой код для этого было бы очень большой работой. (Я использую хеш-таблицы в одном и том же месте в моем скрипте)

В принципе, у меня было бы два вопроса:

  • Отличается ли структура HashTable от основных ассоциативных массивов php, или это то же самое, только красиво обернутые в функции?
  • Есть ли способ избежать замедления моего сценария, когда анализируется только небольшой объем данных, и при этом сохраняется преимущество хеширования одинаковых данных?

Чтобы уточнить мой второй вопрос, что я хотел бы знать, есть ли способ предотвратить накладные расходы на проверку, если хеш-таблица уже существует в хеш-таблице, при их использовании?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...