Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Map<T, Boolean> изоморфен типу Set<T> (и, например, в Java множество HashSet построено как тонкая обёртка над HashMap). В языках, где нет эффективной поддержки дженериков, множества частно эмулируются через ассоциативные массивы непосредственно. Например, общепринятым в Go способом создания множества (упоминается даже в официальной документации) является использование map[<something>]bool.define('TEST_ITER', 100000);
$data = array('арбуз', 'дыня', 'вишня', 'слива', 'яблоко', 'груша', 'смородина', 'персик', 'абрикос', 'банан', 'виноград', 'киви');
$t = microtime(true);
for($i=0; $i<TEST_ITER; $i++)
$tmp = in_array('картофель', $data);
var_dump(microtime(true)-$t); // float(0.082980155944824)
$t = microtime(true);
$data = array_flip($data);
for($i=0; $i<TEST_ITER; $i++)
$tmp = isset($data['картофель']);
var_dump(microtime(true)-$t); // float(0.0057001113891602)
В следующем примере список запрещённых слов будет состоять из 10 000 элементов.
Используйте поиск по хешу, а не обыск массива