Ruby注入直到sum超过设定值并返回发生这种情况的索引

使用以下数组和值:

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

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

10 + 20 + 25 = 55(这是总和大于’v’的第一个点)所以index = 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