尝试使用索引获取数组的上一个和下一个项目

Trying to get the previous and next item of an array using index

我想做的是从输入数组创建一个新数组并遍历它。新数组的每一项都是迭代的前一项和下一项相乘的结果。

例如:

Array input: [1, 2, 3, 4, 5, 6]
Array_final: [2, 3, 8, 15, 24, 30]
   first item: 2*1 (because there's no previous item)
   second item: 3*1
   third item: 4*2
   forth item: 5*3
   fifth item: 6*4
   sixth item: 6*5 (we use the current item because we don't have a next one)

这是我的代码,我不明白为什么我总是得到 array_final = [0, 0, 0, 0, 0, 0]

class Arrays
      def self.multply(array)
        array_final = []
        last_index = array.length-1
      
        array.each_with_index do |num, i|
          if i == 0
            array_final.push (num[i+1])
          elsif i == last_index
            array_final.push (num*num[i-1])
          else
            array_final.push(num[i+1]*num[i-1])
          end
        end
        return array_final
      end
    end

您将 num 用作数组,而它是一个元素。

我想你的意思是:

array.each_with_index do |num, i|
  if i == 0
    array_final.push (array[i+1])
  elsif i == last_index
    array_final.push (num*array[i-1])
  else
    array_final.push(array[i+1]*array[i-1])
  end
end

您可以使用 each_cons 获取顺序项:

final = [input[0] * input[1]]

input.each_cons(3) do |precedent, _current, subsequent|
  final << precedent * subsequent
end

final << input[-1] * input[-2]

Live example