|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 31 Jan 2002 03:18:28 To : vitus@ice.ru Subject : Re: Как из списка @list удалить скаляр $num -------------------------------------------------------------------------------- <vitus@ice.ru> wrote in message news:a39fjk$fk4$3@host.talk.ru... > Andrey Titov <brandname@mtu-net.ru> wrote: > AT>Как из списка @list удалить скаляр $num? > AT>В perlfaq4 описывается только операция > AT>с двумя списками. Прямой перебор элементов > AT>кажется слишком долгой процедурой. > > Другого варианта все равно нет. > > @list= grep {$_ != $num}, @list; Почему же, есть. Использовать другие структуры данных. Если порядок следования элементов не важен (автор упомянул об этом), то возможно лучше хранить данные в хэше, где ключом будут те самые $num-ы, а значениями их количество. Тогда операция удаления приведется к delete $hash{$num}. После манипуляций подобный хэш легко преобразовать в список: @list = map { ($_) x $hash{$_} } keys %hash; Если и повторов не бывает, то все вырождается в еще более простой код: %hash = map { $_ => 1 } @list; delete $hash{$num}; @list = keys %hash; Разумеется целесообразность этой операции зависит от того, каков размер массива и как много раз приходится удалять в нем элементы. Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65776850f79d.html, оценка из 5, голосов 10
|