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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> exists() для хеша массивов? 
:(
    Опции темы
Suppir
Дата 28.6.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как быстро проверить, есть ли элемент в хеше массивов?

хеш{ключ}(значение1, значение2, значение3)

Как сделать быструю проверку, есть ли значение для определенного ключа хеша?
PM MAIL   Вверх
arto
Дата 28.6.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



perldoc List::Util
PM MAIL ICQ   Вверх
afiskon
Дата 28.6.2011, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



defined()
PM MAIL WWW   Вверх
vadiml
Дата 28.6.2011, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 7



if ( defined $хеш{ключ} && $элемент ~~ $хеш{ключ} ) {
есть
}
PM MAIL Jabber   Вверх
Suppir
Дата 28.6.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1) vadiml, не совсем понятно, как здесь работает оператор ~~

2) насколько эта проверка будет работать медленней, чем простой exists() по хешу? (мне нужно быстро проверять)


Это сообщение отредактировал(а) Suppir - 28.6.2011, 14:43
PM MAIL   Вверх
vadiml
Дата 28.6.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 7



1. оператор ~~ проверят наличие элемента в массиве, exists или defined проверяет только наличие ключа в хеше, а есть ли элемент в массиве, который находится в хеше, он узнать не может (оператор появился в perl 5.10)

2. здесь вместо exists лучше использовать defined, т.к. первый проверят есть ключ в хеше, а второй есть ли что-то в хеше под этим ключём:

my %h = ( k1 => undef, $k2 => 1);
if ( exists  $h{k1} ) # будет истина
if ( defined  $h{k1} ) # будет ложь
if ( defined  $h{k2} ) # будет истина

PM MAIL Jabber   Вверх
Suppir
Дата 28.6.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vadiml, спасибо  за разъяснения!

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


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

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


 




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


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

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