在Ruby/Rails中合并数组

Cro*_*ton 17 ruby orm ruby-on-rails ruby-on-rails-4

如何合并两个数组?像这样的东西:

@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).merge(@movie)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

@options我需要一个包含四个元素的数组@movie.

Nic*_*eys 39

像这样?

?? irb
2.2.2 :001 > [1,2,3] + [4,5,6]
 => [1, 2, 3, 4, 5, 6] 
Run Code Online (Sandbox Code Playgroud)

但是你没有2个阵列.

你可以这样做:

@movie = Movie.first()
@options = Movie.order("RANDOM()").first(3).to_a << @movie
Run Code Online (Sandbox Code Playgroud)


jos*_*ing 7

这个问题分为两个部分:

  1. 如何"合并两个阵列"?只需使用+方法:

    [1,2,3] + [2,3,4]
    => [1, 2, 3, 2, 3, 4]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 怎么做你想要的?(事实证明,这并没有合并两个数组.)让我们首先解决这个问题:

    @movie是您的Movie模型的一个实例,您可以使用该实例进行验证@movie.class.name.

    @options是一个Array,您可以验证@options.class.name.

    您现在需要知道的是如何将新项目附加到数组(即,将您的@movie项目附加到@options数组)

    你用双铲子做到了:

    @options << @movie
    
    Run Code Online (Sandbox Code Playgroud)

    这基本上与以下内容相同:

    [1,2,3] << 4
    => [1,2,3,4]
    
    Run Code Online (Sandbox Code Playgroud)


Ana*_*mez 7

合并(合并)数组:

[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]
Run Code Online (Sandbox Code Playgroud)

连接数组:

[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]
Run Code Online (Sandbox Code Playgroud)

向数组添加元素:

[1, 2, 3] << 4 #=> [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但似乎您没有数组,而是活动记录。您可以使用 将其转换为数组to_a,但您也可以直接执行以下操作:

Movie.order("RANDOM()").first(3) + [@movie]
Run Code Online (Sandbox Code Playgroud)

它返回你想要的数组。