Tips&Tricks — Проверка объявления переменной — массива и вставка нового элемента
июля 21, 2012 | Published in Ruby, Tips&Tricks | 3 Comments
Вам наверное знаком такой код:
a ||= [] a << elem
Так вот, вместо нее можно использовать:
a = [1,2,3,4,5] b = nil a = Array.new([*a, 6]) b = Array.new([*b, 1]) a # => [1, 2, 3, 4, 5, 6] b # => [1]
UPD Предложение от Михаила Дитерле в комментариях:
a = [*a, 6] b = [*b, 1]
июля 21, 2012 at 15:37 (#)
Если массив очень большой, это пустая трата памяти, т.к фактически создается дубликат массива с добавленным элементом, плюс избыточное использование Array.new тут, можно проще
июля 21, 2012 at 18:07 (#)
Михаил, на больших массивах естественно тормозить будет, даже методы из классов ядра, а еще его в цикле нельзя использовать… Это люди должны как очевидные вещи понимать. Вообще рецепт для простеньких случаев, когда в массиве не больше нескольких десятков элементов. Касательно твоего «редизайна» — добавлю его в UPD. Спасибо за улучшение, чего-то сам не сообразил без Array использовать.
сентября 8, 2012 at 11:58 (#)
a ||= []
a << elem
Это можно записать так: (a ||= []) << elem