цикл по вложенным массивам и доступ к элементам RUBY - PullRequest
0 голосов
/ 28 мая 2020

Я хочу перебирать вложенный массив и работать с каждым элементом, поэтому в этом случае возведите каждое число в квадрат. Я знаю, как это сделать для обычного массива, но по какой-то причине я получаю неопределенный метод карты, когда включаю более глубокую итерацию для доступа к внутренним массивам. Я тоже новичок ie, так что если бы вы могли объяснить, как это работает, это помогло бы мне в обучении. Спасибо

def SquareArrayElements(n)
  n.each do |number|
    number.map do |num|
     squared_nums = num * num
  end
end
squared_nums  
end
SquareArrayElements([10,[[10],10],[10]])

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Поскольку вы сказали в комментариях, что:

я хочу возвести в квадрат 10 и вернуть их в один массив => [100,100,100,100].

I Предположим, что вам не нужно сохранять исходные массивы, а нужен только один массив с результатами в квадрате. В этом случае вы можете #flatten массив, а затем возвести числа в квадрат:

def square_array(arr)
  arr.flatten.map { |e| e ** 2 }
end  

square_array([10,[[10],10],[10]])
#=> [100, 100, 100, 100]
2 голосов
/ 28 мая 2020

Вам нужно вызвать map только для массивов, а не для целых чисел. Вот почему вы получаете неопределенный метод карты, целые числа не поддерживают этот метод.

Попробуйте

def square_array(element)
  if element.responds_to?(:map)
    element.map{|m| square_array(m)}
  else
    element * element
  end
end
...