Использование значений в качестве ключей в массивах для уменьшения сложности при поиске элементов
Вот где-то я много делаю в PHP. Поиск иглы в стоге сена.
$names = [
'Mike',
'John',
'Dave',
'Tony'
];
$gotDave = in_array('Dave', $names);
Время выполнения in_array равно O (n), где n - количество элементов.
Я часто настраиваю свою структуру данных поиска, чтобы выглядеть так.
$names = [
'Mike' => true,
'John' => true,
'Dave' => true,
'Tony' => true
];
$gotDave = isset($names['Dave']);
Время выполнения O (1), потому что в php ассоциативный массив является хэшмапом.
Некоторые вопросы:
- Должен ли я это сделать? это хорошая практика?
- есть лучшее значение для правой руки
Ответы
Ответ 1
Да, это отличное решение. Фактически, именно так, как Sets реализованы в основных библиотеках большинства языков программирования, - в верхней части моей головы Python, Ruby и Java делают это так. Язык Go не предоставляет Set и просто говорит вам, что вы сделали то, что вы сделали.
Я не могу думать о какой-либо причине использовать любое значение, отличное от true `` `true``. Это имеет смысл.
Ответ 2
вы можете использовать array_key_exists()
для проверки ключа массива, в отличие от in_array
, который проверяет значения
вам нужно будет использовать array_key_exists()
вместо isset()
в вашем случае