我正在做一个关于theodinproject ruby课程的项目。我将实现一个方法,该方法接收股票价格的数组,并返回最佳买入日和最佳卖出日。每个价格的指数(数组元素)是它的日子。我想解决这个问题的方法是首先将数组复制到一个新的绑定中,然后在原始数组上进行Map,并在其内部Map到复制的数组中,并在循环结束后删除第一个元素,即,用于一个人不能在第10天买入而在第1天卖出的情况。
这是我写的代码:
def stock_picker(stock_price)
#copying the array into a new binding
stock_array = []
stock_array.replace(stock_price)
stock_price.map do |buy|
stock_array.map do |sell|
sell - buy
end
#deleting the first element
stock_array.shift
end
end
array = stock_picker([17,3,6,9,15,8,6,1,10])
这是我得到的结果:
[17, 3, 6, 9, 15, 8, 6, 1, 10]
而这正是我所期待的
[[0, -14, -11, -8, -2, -9, -11, -16, -7], [0, 3, 6, 12, 5, 3, -2, 7], [0, 3, 9, 2, 0, -5, 4], [0, 6, -1, -3, -8, 1], [0, -7, -9, -14, -5], [0, -2, -7, 2], [0, -5, 4], [0, 9], [0]]
3条答案
按热度按时间8qgya5xd1#
首先,我不明白 * 为什么 * 你每次都要移动第一个元素。但是这里有一些评论可以帮助你:
.map
块中,返回最后一个值。在这个例子中是stock_array.shift
。这就是为什么你得到初始数组的结果。因为它迭代数组,每次返回第一个元素,但是因为每次你移动数组,你只是去到下一个值,下一个值,等等...stock_price.dup
,而不是使用新数组并将其替换为stock_price
你会有这样的东西:
但是,上面的例子返回了你想要的东西,我不明白 * 为什么 *...
jv2fixgn2#
下面是获得预期输出的简单循环方法:
代码:
将给予
输出:
6l7fqoea3#
请尝试以下内容
输出量