2015-04-30 16 views
12

Come posso unire due array? Qualcosa del genere:Unisci array in Ruby/Rails

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

Ma non funziona.

In @options Ho bisogno di un array con quattro elementi include @movie.

risposta

26

Ti piace questo?

⚡️ irb 
2.2.2 :001 > [1,2,3] + [4,5,6] 
=> [1, 2, 3, 4, 5, 6] 

Ma non si dispone di 2 matrici.

Si potrebbe fare qualcosa di simile:

@movie = Movie.first() 
@options = Movie.order("RANDOM()").first(3).to_a << @movie 
+0

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

+0

Sì ho parlato troppo presto, verificare l'aggiornamento ... –

+0

Grazie! Mi dimentico sempre di "<<" :) –

1

@movie non è una matrice nel tuo esempio, si tratta solo di una singola istanza di un film. Questo dovrebbe risolvere il problema:

@options << @movie 
3

Ci sono due parti a questa domanda:

  1. Come "fondere due array"? Basta usare il metodo +:

    [1,2,3] + [2,3,4] 
    => [1, 2, 3, 2, 3, 4] 
    
  2. come fare ciò che si vuole? (Che, come si è visto, non è la fusione di due array.) Prima pausa Let giù quel problema:

    @movie è un'istanza del modello Movie, che è possibile verificare con @movie.class.name.

    @options è un Array, che è possibile verificare con @options.class.name.

    Tutto quello che devi sapere ora è come aggiungere un nuovo elemento a un array (ad es., Aggiungere il vostro articolo @movie al @options array)

    È farlo usando la doppia pala:

    @options << @movie 
    

    questo è essenzialmente lo stesso come qualcosa di simile:

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

Beh, Se hai un elemento da unire in un array, puoi usare <<:

Eg: array = ["a", "b", "c"], element = "d" 
array << element 
=> ["a", "b", "c", "d"] 

O se avete due array e vogliono duplicati poi fanno uso di += o semplicemente + in base alle vostre esigenze in materia di requisiti mutabilità:

Eg: array_1 = [1, 2], array_2 = [2, 3] 
array_1 += array_2 
=> [1, 2, 2, 3] 

O se avete due array e vuole trascurare i duplicati poi fare uso di |= o semplicemente |:

Eg: array_1 = [1, 2], array_2 = [2, 3] 
array_1 |= array_2 
=> [1, 2, 3]