在Ruby中,如何循环遍历一个数组并在每次迭代后删除第一个元素?

wlp8pajw  于 2022-11-04  发布在  Ruby
关注(0)|答案(3)|浏览(130)

我正在做一个关于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]]
8qgya5xd

8qgya5xd1#

首先,我不明白 * 为什么 * 你每次都要移动第一个元素。但是这里有一些评论可以帮助你:

  • .map块中,返回最后一个值。在这个例子中是stock_array.shift。这就是为什么你得到初始数组的结果。因为它迭代数组,每次返回第一个元素,但是因为每次你移动数组,你只是去到下一个值,下一个值,等等...
  • 您可以简单地将其复制为stock_price.dup,而不是使用新数组并将其替换为stock_price

你会有这样的东西:

def stock_picker(stock_price)
  stock_price.dup.map do |buy|
    res = stock_price.map do |sell|
      sell - buy
    end

    stock_price.shift
    res
  end
end

但是,上面的例子返回了你想要的东西,我不明白 * 为什么 *...

jv2fixgn

jv2fixgn2#

下面是获得预期输出的简单循环方法:

代码

array = [17,3,6,9,15,8,6,1,10]
arr = [17,3,6,9,15,8,6,1,10]
answer = []

for i in array 
    temp = []
    arr.each do |x| 
      temp.push(x - i)
  end 
      arr.shift
  answer.push(temp)
end 

print answer

将给予

输出:

[[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]]
6l7fqoea

6l7fqoea3#

请尝试以下内容

def stock_picker(stock_price)
  #copying the array into a new binding
  stock_array = []
  stock_array.replace(stock_price)

  stock_price.map do |buy|
    result = stock_array.map {|sell| sell - buy }
    stock_array.shift
    p result
  end
end

array = stock_picker([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]

相关问题