如何将每个值彼此相乘

Jus*_*ice 0 ruby arrays product cycle

我想将每个项目放在一个数组中,将它们彼此相乘,然后找到倍数的最大值。

我尝试了很多事情,直到找到了该cycle方法,然后才知道并陷入困境:

def adjacentElementsProduct(inputArray)
  outArray = inputArray.cycle(inputArray.length){|num| num[0] * num[1]}.to_a

  return outArray.max
end
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为Ruby显然没有(陈述的)能力来知道什么num[0]或是什么num[1]

例如:

adjacentElementsProduct([3, 6, -2, -5, 7, 3]) => 21 
Run Code Online (Sandbox Code Playgroud)

因为3*7当所有数字相乘时是最大的乘积。

Ily*_*lya 5

您可以找到两个最大的值。无需尝试每种组合:

[3, 6, -2, -5, 7, 3].max(2).inject(:*)
#=> 42
Run Code Online (Sandbox Code Playgroud)

如果您仍然想结合使用,请使用以下combination方法:

[3, 6, -2, -5, 7, 3].combination(2)
                    .map { |f, s| f * s }
                    .max
#=> 42
Run Code Online (Sandbox Code Playgroud)

如果要查找最大的其他值,请使用each_cons

[3, 6, -2, -5, 7, 3].each_cons(2)
                    .map {|f, s| f * s }
                    .max
#=> 21
Run Code Online (Sandbox Code Playgroud)

也,

max_by {|f, s| f * s }.inject(:*)
Run Code Online (Sandbox Code Playgroud)

可以代替使用,但这取决于您。