我有这个数组,需要用上一个和下一个的乘法替换它的元素。
我执行以下操作:
array.each_with_index{|element, index|
next_element = array[index+1]
previous_element = array[index-1]
}
array.map! {|a|
if a == array.first
a = a * next_element
elsif a == array.last
a = a * previous_element
else
a = next_element * previous_element
end
}
我期望得到以下结果:
array = [4, 1, 6, 7, 9, 3, 0] #given array
array = [4, 24, 7, 54, 21, 0, 0] #array replaced
我收到以下错误:
undefined local variable or method `next_element' for Arrays:Class
有没有一种简单的方法来获取给定数组元素的上一个和下一个元素?
我使用的array.map!
方法正确吗?
这将工作:
array = [4, 1, 6, 7, 9, 3, 0]
[nil, *array, nil].each_cons(3).map { |l, m, r| (l || m) * (r || m) }
#=> [4, 24, 7, 54, 21, 0, 0]
数组被nil
值包围,因此每个元素都有邻居。each_cons(3)
然后将每个元素及其相邻元素map
(左元素(l
)与右r
元素(m
)相乘)合并,如果其中一个元素恰好是,则退回到中间元素()nil
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句