Попытка получить предыдущий и следующий элемент массива с помощью индекса - PullRequest
1 голос
/ 19 июня 2020

То, что я пытаюсь сделать, это создать новый массив из входного массива и перебрать его. Каждый элемент нового массива является результатом умножения предыдущего и следующего элемента итерации.

Например:

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

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

Вы используете 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
2 голосов
/ 19 июня 2020

Вы можете использовать each_cons для получения последовательных элементов:

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

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

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

Живой пример

...