【问题标题】:Ruby how to compare 2D arrays valuesRuby如何比较二维数组值
【发布时间】:2015-06-07 13:51:29
【问题描述】:

我有两个关于 Ruby 上的数组的问题:

首先,我不知道如何比较这个数组数组

 a = [[1,2,3,5] , [1,2,3,6]]

输出:11

第二个,我想把它们合并成一个长数组

   a = [[1,2,3] , [4,5,6]] 
=> a = [1,2,3,4,5,6]

谢谢。

【问题讨论】:

    标签: arrays ruby multidimensional-array


    【解决方案1】:

    要从数组中获取最大总和的项目,您可以使用以下行:

    a.max_by {|arr| arr.inject(0, &:+)}
    

    要从父数组中的所有数组中获取所有 uniq 值,请使用以下行:

    [[1,2,3] , [4,5,6]].flatten.uniq
    

    【讨论】:

    • 在第一行你可以省略参数中的零,只使用inject(&:+)就足够了。
    【解决方案2】:

    您的第一个问题:您是否要比较两个数组的内容之和?如果是这样,您可以执行以下操作:

    a = [[1,2,3,5],[1,2,3,6]]
    a[0].inject(:+) < a[1].reduce(:+)
    # returns true
    

    您的第二个问题:a.flatten 会将所有元素组合到一个数组中。

    我建议通读 Ruby 文档,因为对 injectflatten 之类的内容进行了非常详细的解释。

    【讨论】:

      【解决方案3】:

      首先,我不知道如何比较这个数组数组 a = [[1,2,3,5] , [1,2,3,6]] (尝试得到答案11
      您可以使用

      a = [[1,2,3,5] , [1,2,3,6]]
      a[0].inject{|sum,x| sum + x } < a[1].inject{|sum,x| sum + x }
      

      或者

      a = [[1,2,3,5] , [1,2,3,6]]
      a[0].reduce(:+) < a[1].reduce(:+)
      

      您也可以使用a[0].inject(:+) &lt; a[1].inject(:+)。减少强调Map reduce verbage.

      第二,我想将它们合并成一个长数组 a = [[1,2,3] , [4,5,6]] => a = [1,2,3, 4,5,6]

      a = [[1,2,3,5] , [1,2,3,6]]
      concatenated = a.flatten
      

      a = [[1,2,3,5] , [1,2,3,6]]
      concatenated = a.reduce(:concat)
      

      concatenated = a.reduce(:+)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2021-12-08
        • 1970-01-01
        相关资源
        最近更新 更多