![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Добрый день!
У меня есть хеш хешей, который я составил следующим образом: $hash_А{$document_ID}{Date}=$date; $hash_А{$document_ID}{Code}=$code; $hash_А{$document_ID}{Size}=$size; Всего несколько тысяч уникальных $document_ID, и у каждого есть Date=>$date, Code=>$code, Size=>$size; Потом я составил $hash_B, который выглядит аналогично (но документы имеют другие значения) $hash_B{$document_ID}{Date}=$date; $hash_B{$document_ID}{Code}=$code; $hash_B{$document_ID}{Size}=$size; Необходимо: перебирая все $document_ID из $hash_A, найти аналогичный $document_ID в $hash_B; если у этих документов $date, $code и $size отличаются (хотя бы один из параметров), но выдать ошибку для данного $document_ID из $hash_A. Это сообщение отредактировал(а) Suppir - 14.6.2010, 20:22 |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Забыл добавить:
$document_ID в $hash_А и $document_ID в $hash_B могут отличаться регистром символов (это численно-буквенная строка, вроде "abc-12"). Для каждого $document_ID из $hash_А нужно искать аналогичный $document_ID из $hash_B без учета регистра. |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
перебирайте влоб:
while (my ($aa,$bb) = each %hasA) { while (my ($aaa,$bbb) = each %hashB) { ... } } |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Если Вы можете привести к одному регистру, то быстрее брать document_ID из 1-го хеша
и для второго делать if ( exists $hash_B{$document_ID} ) { ... } |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
vadiml, document_ID и все остальные параметры нужно оставить как есть (регистр важен), но само сравнение нужно проводить без учета регистра.
Я воспользовался советом arto, только перебирал через foreach $key(keys %hash_A) {} Это сообщение отредактировал(а) Suppir - 15.6.2010, 19:18 |
|||
|
||||
klem4 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 27.7.2008 Репутация: 2 Всего: 2 |
Как вариант:
|
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Подскажите, пожалуйста, как отсортировать хеш хешей?
Есть хеш хешей следующего вида: $hash{$ID}{Type} $hash{$ID}{Name} $hash{$ID}{Date} $hash{$ID}{Code} Несколько тысяч ID. У каждого из них есть Type, Name, Date, Code. Необходимо сделать перебор хеша таким образом: foreach $key(keys $hash){ сделать что-то } При этом foreach должен выдавать нам элементы хеша в строгом порядке, учитывающим следующие приоритеты: 1. Type по алфавиту. 2. Date по убыванию даты (сначала самые свежие). Дата вида 8.04.2009 или 01.01.2010 3. Code по цифрам, чем больше цифра, тем больше приоритет 4. Name не учитываем. Т.е. в первую очередь нужно выдать ID, у которого Type начинается с буквы "А", дата максимально поздняя, Code максимально большой. Это сообщение отредактировал(а) Suppir - 17.6.2010, 12:34 |
|||
|
||||
ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
думаю вам нужно смотреть в сторону связывания (tie)
http://search.cpan.org/~jgatcomb/Tie-Hash-...-0.10/Sorted.pm |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Хэши сортируются точно так же, как и все остальное.
-------------------- Died at Life.pl line 21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |