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