Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl: Удаление элемента из массива

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
@a = 1 .. 3;
 
delete $a[1];
 
это понятно ....  
 
а есть ли функция которая удаляет не по номеру элемента а по значению элемента или свою варганить... с хешами правда удобней по ключику удалять вот... но также и для хеша есть ли тоже подобное чтоб удалять не по ключу а по значению ?

----------
FreeBSD лучше Linux !





Добавил Perl в название. — Svarga.

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 07:02 06-12-2003 | Исправлено: Svarga, 04:02 08-12-2003
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KVCH

Цитата:
но также и для хеша есть ли тоже подобное чтоб удалять не по ключу а по значению ?

Скорее всего перебором и поиском.. как в примере на PHP

Код:
 
function_removeholiday($date2go)
{ foreach($this->holiday_array as $k => $v)
  { if ($v == $date2go)
    { unset($this->holiday_array[$k]);
    }
  }
}

Хотя для поиска в php есть array_search

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:06 06-12-2003
kronic

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А у меня не получает ся у удалить из массива значения которые содержат больше двух символов помогите.

Всего записей: 168 | Зарегистр. 01-11-2006 | Отправлено: 13:12 27-11-2007
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
grep /^..?$/,@array

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 14:36 27-11-2007
OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Чтобы удалить элемент массива, зная его значение, делаем так:
 

Код:
@array = [ grep $_!= 3 , @array ];

 
это удалит элемент, значение которого равно 3, а все последующие элементы сместятся на одну позицию влево.
 
Кстати говоря, если в массиве есть повторяющиеся значения, то они удалятся тоже.
 
Взято из http://www.feofilaktov.ru/page/odnomernyj-massiv-perl

----------
Отче Наш, иже еси в моем PC. Да святится имя и расширение Твоё. ENTER.

Всего записей: 3590 | Зарегистр. 09-07-2002 | Отправлено: 19:10 06-04-2013
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
фигня, прости господи, получается:

 DB<1> @a = qw( 1 2 3 4 5 6 7 8 9 )

 DB<2> p @a
123456789
 DB<3> @a = [ grep $_!=3 , @a ]

 DB<4> p @a    
ARRAY(0x18668d0)
 DB<5>

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 08:47 08-04-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
фигня, прости господи, получается

да потому что там ссылка на массив получается, ессно

Код:
my @a = (1..9);
@a = @{[grep $_!= 3, @a]};
print @a;


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:27 08-04-2013
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
зачем каждый раз разименовывать ссылку?
 
perl -MBenchmark=cmpthese -e '@a = (1..100); cmpthese($ARGV[0], { ''A'' => sub { my @b = grep $_=~m#3#, @a }, ''C'' => sub { my @b = @{[ grep $_=~m#3#, @a ]} } })' 1000000
     Rate    C    A
C 70872/s   -- -16%
A 84674/s  19%   --

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 10:03 08-04-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arto

Цитата:
зачем каждый раз разименовывать ссылку?  

я не увлекаюсь программированием на Perl
просто показал как работает -вы же этого не сделали в ответе.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:09 08-04-2013 | Исправлено: Cheery, 10:09 08-04-2013
OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Там и так покатит вощето =)))
 

Код:
my @a = (1..9);  
@a = grep $_!= 3, @a;  
print @a;

Всего записей: 3590 | Зарегистр. 09-07-2002 | Отправлено: 06:19 27-10-2015
hedgehogelez



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Красавище!!! Пол дня бился над проблемой, а решение как всегда простое.
    @$point = @{[grep $$_{'contract'}!= $contract, @$point]};

Всего записей: 5 | Зарегистр. 03-01-2007 | Отправлено: 14:54 24-03-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl: Удаление элемента из массива


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru