Как я могу объединить два массива? Что-то вроде этого:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Но это не сработает.
В @options
Мне нужен массив с четырьмя элементами включает @movie
.
Как я могу объединить два массива? Что-то вроде этого:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Но это не сработает.
В @options
Мне нужен массив с четырьмя элементами включает @movie
.
Как это?
⚡️ irb
2.2.2 :001 > [1,2,3] + [4,5,6]
=> [1, 2, 3, 4, 5, 6]
Но у вас нет 2 массивов.
Вы можете сделать что-то вроде:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).to_a << @movie
На этот вопрос две части:
Как "объединить два массива"? Просто используйте метод +
:
[1,2,3] + [2,3,4]
=> [1, 2, 3, 2, 3, 4]
Как сделать то, что вы хотите? (Который, как оказалось, не объединяет два массива.) Пусть сначала разрушит эту проблему:
@movie
- это экземпляр вашей модели Movie
, которую вы можете проверить с помощью @movie.class.name
.
@options
является Array
, который вы можете проверить с помощью @options.class.name
.
Теперь вам нужно знать, как добавить новый элемент в массив (т.е. добавить ваш элемент @movie
в массив @options
)
Вы делаете это с помощью двойной лопаты:
@options << @movie
это по существу то же самое, что и:
[1,2,3] << 4
=> [1,2,3,4]
@movie
не является массивом в вашем примере, это всего лишь один экземпляр фильма. Это должно решить вашу проблему:
@options << @movie
Ну, если у вас есть элемент для объединения в массив, вы можете использовать <<
:
Eg: array = ["a", "b", "c"], element = "d"
array << element
=> ["a", "b", "c", "d"]
Или, если у вас есть два массива и вы хотите дублировать, используйте +=
или просто +
на основе ваших требований по требованиям к изменяемости:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 += array_2
=> [1, 2, 2, 3]
Или, если у вас есть два массива и вы хотите игнорировать дубликаты, используйте |=
или просто |
:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 |= array_2
=> [1, 2, 3]