Подтвердить что ты не робот

Объединить массивы в Ruby/Rails

Как я могу объединить два массива? Что-то вроде этого:

@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)

Но это не сработает.

В @options Мне нужен массив с четырьмя элементами включает @movie.

4b9b3361

Ответ 1

Как это?

⚡️ 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

Ответ 2

На этот вопрос две части:

  • Как "объединить два массива"? Просто используйте метод +:

    [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]
    

Ответ 3

@movie не является массивом в вашем примере, это всего лишь один экземпляр фильма. Это должно решить вашу проблему:

@options << @movie

Ответ 4

Ну, если у вас есть элемент для объединения в массив, вы можете использовать <<:

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]