![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Нужно проделать с массивом то, что обычно делают со строками:
Конечно, какой-то работающий код для массива у меня есть. Но, как обычно, интересует эффективность, в частности, можно ли обойтись без временного массива. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
grep или map со splice
|
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Не удастся с grep. grep возвращает массив.
Надо splice и for или while.
Это сообщение отредактировал(а) tishaishii - 22.3.2007, 13:31 |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
my $a = 0; grep { defined ($_) ? $a++ : splice @a,$a,1 } @a
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Можно вот так вот:
Отличие то что позволяет за один раз удалить несколько елементов... не вызывая splice каждому... Писал прям в форум. но надеюсь понятно будет, возможно я не учел то что надо один оставлять пустой, но надеюсь сам сможешь исправить... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
arto, твой код просто удаляет все пустые элементы, а это не совсем то, что нужно.
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Проверил, работает:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
"Нужно проделать с массивом то, что обычно делают со строками:
s/^\s+//; # Удаляем пустые элементы в начале" -- ? |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
arto, не придирайся,
нужно тогда как для строк, три строки:
думаю так лучше всего будет -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
так что удалять-то надо?
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Ну дык все просто, удаляем лидирующие пустые елементы и завершающие, внутри, если несколько подряд идущих, заменяем одним... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Что-то не видно оно.
Вот
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Тут, думаю стоит уточнить, что имеется ввиду под "пустым" элементом. Пробельные символы, определенность елемента, или еще что, и уже подставлять необходимое сравнение в наши варианты...
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Подойдет что угодно. Предлагаю для опреленности считать пустым элементом массива элемент, состоящий из символа "0" (ноль). Предлагаю также считать, что ведущих и ведомых нулей в массиве нет (их удалить несложно). Т.е., например, из
('a', '0', 'b', '0', '0', 'c', '0', '0', '0', 'd') должно получиться ('a', '0', 'b', '0', 'c', '0', 'd') ЗЫ Господа! Примеры кода появляются быстрее, чем я успеваю в них разобраться, так что не обессудьте, сравнивать буду уже только завтра (а то у нас в Новосибирске дело к ночи). |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Таак.
Что-то мне уже кажется, что надо удалять "пустые символы" не только по краям, но и везде, в середине удалять дубликаты? Ну так задача гораздо упрощается.
Это сообщение отредактировал(а) tishaishii - 23.3.2007, 01:20 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |