| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > удалить элемент с массив хєша |
| Автор: gcc 19.3.2009, 04:13 | ||
| не получается удалить или проверить не пуской ли массив-хэшей, то есть при проверке не пустой ли массив оно не адекватно как-то работает... if ($loop_data) { или так if ($#{$loop_data}) { где может быть ошибка как удалить элемент массива и хэши в нем? пример:
|
| Автор: pompei 19.3.2009, 05:42 | ||
а следующий код
вообще какаято лажа. Вы когда делаете splice @{$loop_data}, $loopindex; то $#{$loop_data} уменьшается на 1, $loopindex увеличивается на 1, т.е. в оконцове все четные элементы в массиве останутся а нечётные распечатуются и удалятся. if ($loop_data) { } - всегда будет истина, даже если тот массив, на который ссылается переменная, будет пустой. правильно будет так if (scalar(@{$loop_data}) == 0) {...} #т.е. "если количество элементов в массиве равно нулю" здесь оператор scalar необязателен, но для спокойствия пусть стоит ПРИМЕЧАНИЕ: если массив используется в скалярном контексте, то возвращается количество элементов в мессиве если вам просто надо очистить массив то следайте так $loop_data = []; а если на этот массив ещё кто-то ссылается и ихние ссылки тоже должны быть очищены, то вот так @{$loop_data} = (); Незабывайте что есть ещё такие функции shift @{$loop_data} - удалить из массива первый элемент и вернуть его pop @{$loop_data} - удалить из массива последний элемент и вернуть его |
| Автор: gcc 19.3.2009, 08:27 |
| как тогда правильно удалить конкретный элемент массива при переборе в завсисмости от условия? и проверить не пустой ли массив? (у меня массив с одним значением у котрого хеши, я удалил эти хэши, но а массив стал не пустой) UPD: я поменял это @{$loop_data}, на это @loop_data без ссылки написал - вроде бы работает! если есть вариант более оптимальный, то скажите.. |
| Автор: pompei 19.3.2009, 13:40 | ||
|
| Автор: klem4 19.3.2009, 18:08 | ||
|
| Автор: pompei 20.3.2009, 05:06 | ||||||
Ну а если на этот массив ещё кто-то ссылается, то в таком случае у того останется старый массив Кстати есть ещё вот такой синтаксис:
|
| Автор: klem4 20.3.2009, 08:21 |
| Потестировал немного, на массивах до 10000 при большом кол-ве удалений цикл быстрее грепа, а при больших чем 10000 масивах греп рвет. |