Давайте предположим, что у нас есть большой документ с ключевыми словами, которые нужно еще распарсить. Не важно, сколько раз будет повторяться ключевое слово в документе, важно, что оно должно быть. Когда найдем ключевое слово, нам нужно будет сделать запись об этом, чтобы в дальнейшем использовать эту информацию.
Таким образом в этой статье мы попытаемся рассмотреть два метода сохранения элементов:
индексацию объектов и коллекцию массивов.
Неэффективный метод: коллекция массивов и поиск
Первый метод состоит в том, чтобы записывать найденное ключевое слово в один массив:
1 2 3 4 |
//Assume an array called "foundKeywords" was defined above if(shouldSave(keyword)) { foundKeywords.push(keyword); } |
И в конце концов мы получаем следующий массив:
1 2 |
//the foundKeywords array looks like: //['keyword1','keyword2','keyword2',...] |
Когда дело доходит до проверки этого массива, этот метод окажется неэффективным.
Почему? Потому что надо пройти весь массив, чтобы найти нужное ключевое слово (если оно вообще есть). Это порождает много «пустых» или бесплодных циклов проверки, даже если мы будем их прерывать, если ключевое слово найдено. Вобщем этот метод, определяется одним словом — неэффективен.
Эффективный метод: Объект с индексом
Самый быстрый метод проверки сохраненных ключевых слов с последующей ссылкой на объект (в JavaScript) или ассоциативный массив (в PHP). Вместо того, чтобы добавлять ключевые слова в массив, мы добавляем ключевое слово, как индекс для мастер объекта, выставляя ему значение на 1:
1 2 3 4 |
//Assume an object {} called "foundKeywords" was defined above if(shouldSave(keyword)) { foundKeywords[keyword] = 1; } |
Почему это быстрее? Нет пустых циклов, шерстящих массив слов. Проверка быстра и проста:
1 2 3 |
if(foundKeywords[keyword]) { //FOUND! //do something } |
Ключевое слово существует, как индекс, или его просто нет! В PHP мы сохраняем ключевое слово в ассоциативный массив:
1 2 3 4 5 6 7 8 9 |
//Assume an array called "$found_keywords" was defined above if(shouldSave($keyword)) { $found_keywords[$keyword] = 1; } //Later: checking if the keyword was there... if($found_keywords[$keyword]) { //or array_key_exists($keyword,$found_keywords) //FOUND! } |
Стоит добавить одно слово — замечательно. Не только быстро, но и просто!