Perl. Найти элемент массива и заменить его значение.
Я новичок в перле. Встала задача найти первый найденных элемент в массиве, соответствующий некоторому значению и заменить значение этого элемента.
Для простоты задачи, взьмем массив:
Нужно найти в массиве @ma_arr первый элемент со значением test2 и заменить его значение на «best2». Як лучше всего на ваш взгдя такое проделать? И если можно, то маленький пример в студию).
foreach
// это мой первый кот на пердле
Сдеал сам, как у вас. А сейчас посмотрел - вариант от гоствизида очень хорош.
Всем спасибо, помогли.
Стой. Какой объем массива? Еще может быть вариант через hash с индексацией, когда данных немеренно и много повторений. Как-то так: http://ideone.com/51SxEV
А теперь по сути и по треду:
1) Не используй двойные кавычки в строках, где тебе НЕ нужна интерполяция.2) Константы заноси в readonly переменные3) Регулярные выражения медленнее, чем выполненная задача вручную4) Не стоит использовать сторонние модули в простых задачах, даже если они есть в стандартной комплектации5) Всегда пользуйся use strict; use warnings;6) Не используй /usr/bin/env
даже если они есть в стандартной комплектации
Ну а теперь превратим тред в олимпиаду: newquestion , реквестую версию на жс
потому что оверхед
Ну а теперь превратим тред в олимпиаду: newquestion, реквестую версию на жс
а чего не на си? я бы поучаствовал
Только за! и цацкелистов позови
Отличные советы по коду, спасибо, учту.
полагаю что учитывая что язык и так perl о производительности речь не идёт
Ничего против. Лишняя сущность, у тех, кто балуется и не следует кодексу «мусор на входе — мусор на выходе». И что-то у дело со словами расходится:
Не стоит использовать сторонние модули в простых задачах, даже если они есть в стандартной комплектации
Это тоже, так к слову. Без обид.
почитай о константах в перле. Так, на всякий.
так что? мне уже начинать велосипедить?)
ух ты, прикольно!можешь последовательно объяснить что происходит? начиная от «@a»
нужен анонiмас для разогрева публики
ух ты, прикольно! можешь последовательно объяснить что происходит?
к чему твоё сообщение?
еще царя вспомни
В продакшн коде (модули из CPAN) нынче используется тренд через sub MY_CONST < 42 >или use constant . Те, кто использует константы на массивы, хэши либо не понимают, что делают, либо гики свихнувшиеся на модулях типа Readonly. В крайнем случае, имхо, лучше использовать напрямую use Internals или аналоги. Я может не прав, но не видел в живую ни одного модуля, где используют константы на массивах или хэшах (мне даже самому интересно как и почему, зачем, с радостью почитаю код).
Более того, если говорить о перформансе, то в перле всем плевать на перформанс, до тех пор пока модуль не написан на XS. Pure Perl тормоз by design. Тут даже спорить не о чем. Проблемы не использовать XS-модули это проблемы не осиляторства, либо какие-то искуственные ограничения, либо неверно выбранный инструмент. Пример из вакуума, но ненадуманный, скажем использовать perl на android, вот на кой хер нужен там perl, когда есть Dalvik? А если есть возможность, то сразу писать код на NDK.
Те, кто использует константы на массивы, хэши
ээ. константы на массивы? что? я не предлагал использовать константные массивы или хеши, только лишь как переменные (константы, прости Г-ди).
Если кратко ответить на твой пост, то я курнул pbp, и на моей работе это одобряют. И пока это давало лишь позитивный результат. Хз как сейчас практикуют перл в мире, мне сравнивать особо не с чем.
да это я по доброму шуткую
ревью не прошёл, таск реопен
- нет гарантии что во входных данных нет строки с ','
- хардокод: 'test2' тоже должен подаваться из вне
Переписывай!
Флаг g убери, там только первое вхождение меняется.
Согласен. Ляпнул не подумав.
If afterItem is not found, item is appended to the end of the list.
Тебя нельзя допускать к коду.
ГЛОБАЛЬНАЯ ТЕОРИЯ ИДЕАЛЬНОГО КОДА И ДАННЫХ
допускающий: нулевой балабол, ниасиливший программирование
анонiмус не смог пройти квест TrueTsar1C78 , твой выход
На пожри l contains("test2") ifTrue(l insertAfter("best2", "test2") removeFirst("test2") )
поздно, ты завалил проект, он отдан другому исполнителю, и теперь ты должен заплатить штраф в виде пяти годных срачей
То есть, даже будучи облеванным, ты все равно продолжаешь? Прям как боевой петушок, так держать.
кстати, а че ты не подумал, что будет тут
Мой ответ был на то, что да, многие согласны, что use constant имеет недостатки. С другой стороны, если использовать альтернативы, то лучшая альтернатива это sub MY_CONST < 42 >. Минус ее в том, что а) выделяет лишние 500кб памяти; б) на критичном коде это решение тормоз. На оба этих случая забивают и не обращают внимания. Никаких best practice, никаких внесений лишних сущностей. Потому что код на XS единственное верное решение, чтобы разрулить проблемы выше. От того, что перформанс спадет на 20% в случае с sub , тогда когда разница по сравнению с XS в 1000%, это капля в море. Плюсом же такого решения является простота и отсутствие зависимостей. Как практика показывает, вносить XS-код (тот же Internals) можно не во всех окружениях. И да, этот модуль используется предложенным тобой Readonly. Помимо того, этот модуль (Readonly) еще использует tie-интерфейс, который скорей всего даже хуже sub (надо бенчить, без б).
а ты я смотрю не в конец конченый молодец
я смотрю, спец. олимпиада отменяетсяЖаль, а я так хотел повелосипедить сегодня. :)
Видимо, мой опыт в perl всё еще достаточно скудный. Спасибо за разъяснение! Пригодится