![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| zokos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.11.2010 Репутация: нет Всего: нет |
Добрый день.
Сам я пишу на php, но возникла необходимость переделать одну функцию. Сама задача (в кратце): есть поиск в магазине. Сначала показываются категории с количеством продуктов в каждой. Задача: не показывать те категории, в которых находятся одинаковые продукты. У каждого продукта есть свой ID. Задумка такая была: для каждой категории получать "контрольную сумму/хэш/crc/md5", которую потом засовывать в простой массив. Для следующей категории делать тоже самое и затем смотреть в массиве, есть ли такая "контрольная сумма/хэш/crc/md5". Если есть - категории одинаковые. Собственно, если бы я знал, как сравнивать массивы, можно было бы обойтись и без этого гемо всего. Итак вопрос: на входе есть массив, как получить его контрольную сумму. Насколько я знаю, в перле название "хэш" - это не то, что нужно мне (это вроде массив с ключами ). Мне нужна... эммм... контрольная сумма массива, т.е. уникальный идентификатор. Что-то наподобие сериализированного массива. Уф, надеюсь объяснил, что хоть кто-то мог понять. Заранее спасибо. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -MDigest::MD5=md5_hex -le 'print md5_hex (join "|",@ARGV)' 1 2 3 4 5
19a493ad2f674b646bcecec77644f33d # |
|||
|
||||
| zokos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.11.2010 Репутация: нет Всего: нет |
Большое спасибо. Попробую и отпишусь.
|
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
вот так вот еще видел, хеш-ключ для nginx с уникальными $file->{srv_id}, $file->{file_id} и т.д.
Это сообщение отредактировал(а) gcc - 26.11.2010, 07:00 |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
||||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -MBenchmark=timethese -MList::MoreUtils=uniq -MDigest::MD5=md5_hex -e '@a = map { rand(100) } 1..100; @b = map { rand(100) } 1..100; timethese ($ARGV[0],{ "a" => sub { md5_hex (join "",@a) cmp md5_hex (join "",@b) },"b" => sub { uniq (@a,@b) == @a } } )' 100000
Benchmark: timing 100000 iterations of a, b... a: 3 wallclock secs ( 2.69 usr + 0.00 sys = 2.69 CPU) @ 37174.72/s (n=100000) b: 29 wallclock secs (17.69 usr + 0.04 sys = 17.73 CPU) @ 5640.16/s (n=100000) # |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
arto, ваш способ с контрольной суммой сообщит, что (1,2,3) != (3,2,1)
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. этого не было в условии.
2. данные сразу можно держать сортированными. |
|||
|
||||
| zokos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.11.2010 Репутация: нет Всего: нет |
Большое спасибо всем!!
В идеале (1,2,3) должно быть равно (3,2,1), но надеюсь, что отсортировать массив я смогу |
|||
|
||||
| ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
если версия перл 5.10 и выше, то можно так
Это сообщение отредактировал(а) ming - 4.12.2010, 10:27 |
|||
|
||||
| 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. |