Ruby 注入直到总和超过设定值和 return 发生这种情况的索引

Ruby inject until sum exceeds a set value and return the index where this occurs

具有以下数组和值:

v = 50
a = [10, 20, 25, 10, 15]

我想遍历数组,将值相加,直到这些值的总和超过变量 v。然后我希望能够 return 数组中发生这种情况的索引。所以...

10 + 20 + 25 = 55(这是总和大于 'v' 的第一个点) 所以索引 = 2

感谢您的帮助

总和:

a.inject do |sum,n|
  break sum if sum > v
  sum + n
end

对于索引,思路是一样的——你把备忘录当成一个数组,把总和放在第一个元素中:

a.inject([0,-1]) do |memo,n|
  break [memo[0], memo[1]] if memo[0] > v
  [memo[0]+n, memo[1]+1]
end

之后你需要查看数组

我认为您必须 inject 遍历索引并访问外部数组,因为 inject 不会传递索引;像这样:

a.each_index.inject do |memo, i|
  break i if memo > v
  memo + a[i]
end

更多方法

a.each_with_index.inject 0 do |acc, (n, idx)|
     break idx - 1 if acc > v
     acc + n
end

a.to_enum.with_index(-1).inject 0 do |acc, (n, idx)|
     next acc + n if acc < v
     break idx
end