合并 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
这个问题分为两部分:
如何"merge two arrays"?只需使用 +
方法:
[1,2,3] + [2,3,4]
=> [1, 2, 3, 2, 3, 4]
如何做你想做的事? (事实证明,这不是合并两个数组。)让我们首先分解这个问题:
@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你想要的数组。
如何合并两个数组?像这样:
@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
这个问题分为两部分:
如何"merge two arrays"?只需使用
+
方法:[1,2,3] + [2,3,4] => [1, 2, 3, 2, 3, 4]
如何做你想做的事? (事实证明,这不是合并两个数组。)让我们首先分解这个问题:
对其进行验证@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你想要的数组。