【发布时间】: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
我有两个关于 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
要从数组中获取最大总和的项目,您可以使用以下行:
a.max_by {|arr| arr.inject(0, &:+)}
要从父数组中的所有数组中获取所有 uniq 值,请使用以下行:
[[1,2,3] , [4,5,6]].flatten.uniq
【讨论】:
inject(&:+)就足够了。
您的第一个问题:您是否要比较两个数组的内容之和?如果是这样,您可以执行以下操作:
a = [[1,2,3,5],[1,2,3,6]]
a[0].inject(:+) < a[1].reduce(:+)
# returns true
您的第二个问题:a.flatten 会将所有元素组合到一个数组中。
我建议通读 Ruby 文档,因为对 inject 和 flatten 之类的内容进行了非常详细的解释。
【讨论】:
首先,我不知道如何比较这个数组数组 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(:+) < 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(:+)
【讨论】: