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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать есть ли скаляр в массиве? 
:(
    Опции темы
Vittaliy
Дата 24.10.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времен и суток.
С перлом пока на ВЫ. 
Но вот пишу функцию которая формирует строку параметров. 
Есть Хеш со всеми параметрами и есть масив с именами параметров которые должны присутствовать в результате.
Где то встречал какую то встроеную операцию которая возвращает труе если скаляр входит в массив, а вспомнить не могу. Не хочится писать цикл если есть встроенная операция. Подскажите плиз.
Заранее спасибо.
PM MAIL   Вверх
GoodBoy
Дата 24.10.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Vittaliy @  24.10.2007,  11:19 Найти цитируемый пост)
Где то встречал какую то встроеную операцию которая возвращает труе если скаляр входит в массив
в PHP... smile


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
amg
Дата 24.10.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Vittaliy @  24.10.2007,  10:19 Найти цитируемый пост)
Где то встречал какую то встроеную операцию которая возвращает труе если скаляр входит в массив, а вспомнить не могу.
Это у хэша можно проверить, присутствует ли элемент с данным ключом: exists $hash{$key}. Проверить, входит ли скаляр в массив - через цикл или как-то по-другому, но не одной операцией.

PM MAIL   Вверх
Vittaliy
Дата 24.10.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Блин. Обидно, а я вот был уверен что гдето такое мне попадалось. Ладно буду делать цикл. Спасибо за ответ.
PM MAIL   Вверх
GoodBoy
Дата 24.10.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Vittaliy @  24.10.2007,  14:28 Найти цитируемый пост)
Ладно буду делать цикл

ну это же Перл!!!  smile 

Код
my @qwe = ('qwe', 'asd', 'zxc', '123', 'edc', 'poi', 'lkj');

my %asd = @qwe;
if (exists $asd{'asd'}) {
    скаляр существует
} else {
    unshift @qwe, pop @qwe;  # как вариант - push @qwe, shift @qwe;
    %asd = @qwe;
    if (exists $asd{'asd'}) {
        скаляр существует
    } else {
        скаляр НЕ существует
    }
}

Понятно? Или пояснить? smile


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
korob2001
Дата 24.10.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Ещё вариант:
Код

my $search = "zcc";   # Искомое слово
my @qwe = ('qwe', 'asd', 'zxc', '123', 'edc', 'poi', 'lkj');

print scalar( grep { $_ eq $search } @qwe ) > 0 ? "Cуществует" : "Не существует";

Он же, только в более понятной форме:
Код

my $search = "zxc";   # Искомое слово
my @qwe = ('qwe', 'asd', 'zxc', '123', 'edc', 'poi', 'lkj');

if (scalar( grep { $_ eq $search } @qwe ) > 0) {
    print "Cуществует\n";
} else {
    print "Не существует\n";
}

Пример с поиском по шаблону:
Код

my $search = "zxc";   # Искомое слово
my @qwe = ('qwe', 'asd', 'zxc', '123', 'edc', 'poi', 'lkj');

if (("[".join("][",@qwe)."]") =~ /\[$search\]/o) {
    print "Cуществует\n";
} else {
    print "Не существует\n";
}

Аналогичный предидущему, только вместо регулярного выражения используется index:
Код

my $search = "zxc";   # Искомое слово
my @qwe = ('qwe', 'asd', 'zxc', '123', 'edc', 'poi', 'lkj');

if (index("[".join("][",@qwe)."]", "[$search]") != -1) {
    print "Cуществует\n";
} else {
    print "Не существует\n";
}

Только в последних двух примерах, нужно следить что-бы в искомой строке не встретился разделитель.


Это сообщение отредактировал(а) korob2001 - 25.10.2007, 06:32


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Vittaliy
Дата 25.10.2007, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал вот так:
Код

sub params_to_str(\%,\@,\%) #хеш параметров, масив нужных параметров, хеш доп параметров
 {
   my $rez;
   $_params = $_[0];
   %params = %$_params;
   $_required_params = $_[1];
   $_buf_params = $_[2];
   @required_params = @$_required_params;
   %buf_params = %$_buf_params;
   
   
  foreach $parameter (@required_params)
   {
       if (exists $params{$parameter}){$rez.=" ".$parameter."=\"".$params{$parameter}."\"";}
   }
   
   foreach $parameter (keys (%buf_params))
   {
       $rez.=" ".$parameter."=\"".$buf_params{$parameter}."\"";
   }
   
   return $rez;
 }


Это сообщение отредактировал(а) Vittaliy - 25.10.2007, 06:26
PM MAIL   Вверх
Vittaliy
Дата 25.10.2007, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мощная вещь оказывается grep.
А склеивание имен в строку и дальнейший поиск по ней, на мой взгляд будет долго работать.
PM MAIL   Вверх
korob2001
Дата 25.10.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



В данном случае использование grep излишне, так как мы используем последовательный поиск, т.е. мы идём по всему массиву от начала и до конца, где нам необходимо найти первое вхождение заданного елемента массива.  grep будет каждый раз проходить по всему массиву, не в зависимости от того, в какой позиции был икомый елемент. Если конечно массив не будет большим, то можно оставить и grep, но если нет уверенности, что массив не разростётся, то всё же лучше заюзать цикл и прерывать его, если найден заданный елемент. С другой стороны, если изначально предполагается, что массив будет большим и уже тем более, если он отсортирован, то возможно стоит подумать об использовании не последовательного поиска, а бинарного.

Это сообщение отредактировал(а) korob2001 - 25.10.2007, 17:55


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


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

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


 




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


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

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