2015-04-30 5 views
12

Как слить два массива? Что-то вроде этого:Объединить массивы в Ruby/Rails

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

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

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

ответ

26

Нравится?

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

Rather [1, 2, 3] + [[1, 2, 3], [1, 2, 3], [1, 2, 3]] –

+0

Да, я говорил слишком скоро, проверьте обновление ... –

+0

Спасибо! Я всегда забываю о «<<» :) –

1

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

@options << @movie 
3

Там две части к этому вопросу:

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

    [1,2,3] + [2,3,4] 
    => [1, 2, 3, 2, 3, 4] 
    
  2. Как делать то, что вы хотите? (Что, как выясняется, не слияние двух массивов.) Первый перерыв Давайте вниз эту проблему:

    @movie является экземпляром модели Movie, которые вы можете проверить с @movie.class.name.

    @options - Array, который вы можете подтвердить с помощью @options.class.name.

    Теперь вам нужно знать, как добавить новый элемент в массив (т.Добавьте ваш @movie деталь к вашему @options массив)

    Вы делаете это с помощью двойной лопату:

    @options << @movie 
    

    это, по существу такой же, как что-то вроде:

    [1,2,3] << 4 
    => [1,2,3,4] 
    
0

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

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] 
Смежные вопросы