合并 Ruby/Rails 中的数组

Merge arrays in Ruby/Rails

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

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

但是没用。

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

像这样?

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

@movie 在您的示例中不是数组,它只是电影的单个实例。这应该可以解决您的问题:

@options << @movie

这个问题分为两部分:

  1. 如何"merge two arrays"?只需使用 + 方法:

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

嗯,如果你有一个元素要合并到数组中,你可以使用 <<:

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] 

要合并(合并)数组:

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

连接数组:

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

向数组添加元素:

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

不过你好像没有数组,只有活动记录。你可以用 to_a 将它转换为数组,但你也可以直接这样做:

Movie.order("RANDOM()").first(3) + [@movie]

哪个returns你想要的数组。