Fusionner des tableaux dans Ruby / Rails
Comment puis-je fusionner deux tableaux? Quelque chose comme ça:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Mais ça ne marche pas.
Dans @options
J'ai besoin d'un tableau à quatre éléments comprenant @movie
.
Comme ça?
⚡️ irb
2.2.2 :001 > [1,2,3] + [4,5,6]
=> [1, 2, 3, 4, 5, 6]
Mais vous n'avez pas 2 tableaux.
Vous pourriez faire quelque chose comme:
@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).to_a << @movie
Cette question comporte deux parties:
Comment "fusionner deux tableaux"? Utilisez simplement le
+
méthode:[1,2,3] + [2,3,4] => [1, 2, 3, 2, 3, 4]
Comment faire ce que tu veux? (Ce qui, en fin de compte, ne fusionne pas deux tableaux.) Commençons par résoudre ce problème:
@movie
est une instance de votre modèleMovie
, que vous pouvez vérifier avec@movie.class.name
.@options
est unArray
, que vous pouvez vérifier avec@options.class.name
.Tout ce que vous devez savoir maintenant, c'est comment ajouter un nouvel élément à un tableau (c'est-à-dire ajouter votre
@movie
élément à votre@options
tableau)Pour ce faire, utilisez la double pelle:
@options << @movie
c'est essentiellement la même chose que quelque chose comme:
[1,2,3] << 4 => [1,2,3,4]
@movie
n'est pas un tableau dans votre exemple, c'est juste une seule instance d'un film. Cela devrait résoudre votre problème:
@options << @movie
Pour fusionner (faire l'union de) tableaux:
[1, 2, 3].union([2, 4, 6]) #=> [1, 2, 3, 4, 6] (FROM Ruby 2.6)
[1, 2, 3] | [2, 4, 6] #=> [1, 2, 3, 4, 6]
Pour concaténer des tableaux:
[1, 2, 3].concat([2, 4, 6]) #=> [1, 2, 3, 2, 4, 6] (FROM Ruby 2.6)
[1, 2, 3] + [2, 4, 6] #=> [1, 2, 3, 2, 4, 6]
Pour ajouter un élément à un tableau:
[1, 2, 3] << 4 # => [1, 2, 3, 4]
Mais il semble que vous n'ayez pas de tableaux, mais des enregistrements actifs. Vous pouvez le convertir en tableau avec to_a
, mais vous pouvez aussi faire directement:
Movie.order("RANDOM()").first(3) + [@movie]
qui renvoie le tableau que vous souhaitez.
Eh bien, si vous avez un élément à fusionner dans un tableau, vous pouvez utiliser <<
:
Eg: array = ["a", "b", "c"], element = "d"
array << element
=> ["a", "b", "c", "d"]
Ou si vous avez deux tableaux et souhaitez des doublons, utilisez +=
ou simplement +
en fonction de vos besoins en matière de mutabilité:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 += array_2
=> [1, 2, 2, 3]
Ou si vous avez deux tableaux et que vous souhaitez négliger les doublons, utilisez |=
ou simplement |
:
Eg: array_1 = [1, 2], array_2 = [2, 3]
array_1 |= array_2
=> [1, 2, 3]