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
具有以下数组和值:
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