![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
tooncheg, хэш позволяет нам получать определенные данные из набора по ключу. Это свойство мы используем для организации поиска. Для того, чтобы искать по номеру телефона, надо создать хэш, где ключем будет номер телефона, а значениями данные о людях. Т.к. один номер может быть у нескольких человек, значение в хэше будет массивом. Кроме номера телефона, поиск также может осуществляться по другим полям, поэтому будет несколько хэшей (равно количеству полей для поиска). Чтобы не дублировать в каждом хэше данные о людях, будем в значении хранить только идентификатор человека ($number) и добавим еще один хэш, где ключами будут идентификаторы, а значениями - данные о человеке ($directory{number}{$number} = $person;)
Все используемые хэши я оформил в едином хранилище, которое также представляет собой хэш %directory, в котором ключами являются названия полей.
Добавляем в данные для поля $key по ключу lc($value) идентификатор пользователя $number. lc используем для того, чтобы поиск был независимым от регистра. Если еще есть какие-нибудь вопросы, не стесняйтесь задавать! -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tooncheg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
ginnie
поясните пожалуйста строку из кода $results{$number}++; В бест пректисе встречалась подобная структура, но не смог разобраться. |
|||
|
||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Инкремент элемента хэша %results с ключом $number
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
tooncheg, алгоритм поиска такой:
допустим задано три поля для поиска, выполняем отдельно по каждому заданному значению поиск в соответствующем кэше. Результатом выборки из кэша будут идентификаторы людей (в выборке они не повторяются). На каждом из трех этапов увеличиваем на единицу значение в хэше результатов для найденных идентификаторов. После трех этапов поиска выбираем из данных хэша результатов идентификаторы, у которых значение равно количеству этапов. Если алгоритм понятен, попробуйте дописать программу, выводя кроме полного совпадения, еще и результаты, которые были ближе всего к полному совпадению (т.е. совпали не все поля). ![]() Это сообщение отредактировал(а) ginnie - 5.6.2013, 13:43 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tooncheg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
Это понятно Что происходит? Если Значение хеша undef , т.е. 0 идет приращение на 1цу ? Это сообщение отредактировал(а) tooncheg - 5.6.2013, 13:47 |
|||
|
||||
tooncheg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
ginnie,
вроде работает. Появился вопрос. Каким образом происходит объединение в этой строке join('::', @{$directory{number}{$number}}{qw{surname name patronymic phone room otdel}}) не понимаю последовательность происходящего там. Это сообщение отредактировал(а) tooncheg - 10.6.2013, 13:59 |
||||
|
|||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Мне надо было вывести данные из справочника, сделал вывод полей через разделитель '::'. Т.к. данные хранятся в хэше, надо, чтобы значения вынимались в строго определенном порядке, используем вариант @hash{'field1', 'field2', 'field3'...'fieldN'}. Последовательность такая:
Это сообщение отредактировал(а) ginnie - 10.6.2013, 15:12 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |