【问题标题】:Merge arrays in Ruby/Rails在 Ruby/Rails 中合并数组
【发布时间】:2015-07-10 18:51:54
【问题描述】:

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

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

但它不起作用。

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 orm rails-activerecord


    【解决方案1】:

    像这样?

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

    【讨论】:

    • 而是 [1, 2, 3] + [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
    • 谢谢!我总是忘记“
    【解决方案2】:

    这个问题分为两部分:

    1. 如何“合并两个数组”?只需使用+ 方法:

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

    【讨论】:

      【解决方案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]
      

      返回你想要的数组。

      【讨论】:

        【解决方案4】:

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

        @options << @movie
        

        【讨论】:

          【解决方案5】:

          好吧,如果你有一个元素要合并到一个数组中,你可以使用&lt;&lt;

          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] 
          

          【讨论】:

            猜你喜欢
            • 2022-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-25
            • 1970-01-01
            • 2010-11-17
            • 1970-01-01
            相关资源
            最近更新 更多