Можно ли вставить несколько объектов с оператором << Rails 3.1?
-
25-10-2019 - |
Вопрос
Могу я написать следующее ...
raw_data.categories.each do |category|
obj.categories << category
end
Как следующее? ...
obj.categories << raw_data.categories
Решение
obj.categories |= raw_data.categories
Другие советы
Взгляни на Array#<<
а также Array#push
.
Array#<<
принимает тот, который добавляется на место, чтобы получить массив. Например:
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array << 'd' # => ["a", "b", "c", "d"]
Однако, если вы пройдете массив, вы будете удивлены результатом
irb> array << ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Array#push
может обрабатывать 1+ объекта, каждый из которых добавляется к массиву.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array.push 'd' # => ["a", "b", "c", "d"]
Однако звонок #push
с массивом дает вам тот же результат, что и #<<
.
irb> array.push ['e', 'f', 'g'] # => ["a", "b", "c", "d", ["e", "f", "g"]]
Чтобы подтолкнуть все элементы в массиве, просто добавьте *
перед вторым массивом.
irb> array.push *['e', 'f', 'g'] # => ["a", "b", "c", "d", "e", "f", "g"]
На связанной примечании, в то время как Array#+
Соглашает массивы, это также позволит дублировать значения.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array += ['d'] # => ["a", "b", "c", "d"]
irb> array += ['d'] # => ["a", "b", "c", "d", "d"]
Если это нежелательно, то |
Оператор вернет союз из двух массивов без дублирующих значений.
irb> array = %w[ a b c ] # => ["a", "b", "c"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
irb> array |= ['d'] # => ["a", "b", "c", "d"]
Не связан с StackOverflow