Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> анонимные массивы 
:(
    Опции темы
gcc
Дата 26.11.2009, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



подскажите что это за конструкция на самом деле?

Код

   my %seen;
    @seen{@all} = ();
    delete @seen{@no_old};
    return keys %seen;




есть ли где-то примеры про это? как научиться писать такие фокусы?

Это сообщение отредактировал(а) gcc - 26.11.2009, 08:03
PM WWW ICQ Skype GTalk Jabber   Вверх
Pfailed
Дата 26.11.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



%seen - хеш
@seen{@all} - срез хеша

почитайте


--------------------
PM MAIL   Вверх
DurRandir
Дата 26.11.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Находит разность массивов @all - @no_old
PM   Вверх
amg
Дата 26.11.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(gcc @  26.11.2009,  08:03 Найти цитируемый пост)
подскажите что это за конструкция на самом деле?
Как уже сказано, это разность массивов, т.е. функция вернет только те элементы массива @all, которых нет в массиве @no_old. Вообще-то, реализовать это можно просто перебирая в циклах для каждого элемента одного массива все элементы другого. Но это долго, в перле такие вещи делаются через хэши. 
У этой конструкции такие особенности:
  • элементы массива @all вернутся не в том порядке, в каком они были;
  • из нескольких одинаковых элементов массива @all останется только один;
  • если окажется, что массив @all очень большой, то  на хэш из него может не хватить памяти.
У следующего кода этих особенностей нет:
Код
  my %seen;
  @seen{@no_old} = ();
  return grep {! exists $seen{$_} } @all;
(Я не говорю, что один код лучше другого, просто у них разные достоинства и недостатки).
PM MAIL   Вверх
ginnie
Дата 26.11.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



gcc, встречный вопрос: где ты тут увидел анонимные массивы?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 26.11.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



ginnie, это не анонимный массив, вообще хотел спросить как одностроки писать?  smile 

Это сообщение отредактировал(а) gcc - 26.11.2009, 12:32
PM WWW ICQ Skype GTalk Jabber   Вверх
krypt3r
Дата 26.11.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Да нет их там. Такие фокусы можно увидеть в книге "Perl. Сборник рецептов для профессионалов". Там точно такой же код в решении "Поиск элементов одного массива, отсутствующих в другом массиве".
Хэш в данном случае используется для удобства - не нужно заморачиваться с циклами
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.