我可以在每个循环中获得下一个值吗?
(1..5).each do |i|
@store = i + (next value of i)
end
Run Code Online (Sandbox Code Playgroud)
答案是......
1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 = 29
我也可以获得下一个下一个值吗?
Jus*_*tin 15
从Ruby 1.8.7开始,Enumerable模块的方法each_cons
几乎完全符合您的要求:
each_cons(n){...}→nil
each_cons(n)→ an_enumerator迭代连续<n>元素的每个数组的给定块.如果没有给出块,则返回枚举器.
例如:
Run Code Online (Sandbox Code Playgroud)(1..10).each_cons(3) { |a| p a } # outputs below [1, 2, 3] [2, 3, 4] [3, 4, 5] [4, 5, 6] [5, 6, 7] [6, 7, 8] [7, 8, 9] [8, 9, 10]
唯一的问题是它不会重复最后一个元素.但这很难解决.具体来说,你想要的
store = 0
range = 1..5
range.each_cons(2) do |i, next_value_of_i|
store += i + next_value_of_i
end
store += range.end
p store # => 29
Run Code Online (Sandbox Code Playgroud)
但你也可以这样做:
range = 1..5
result = range.each_cons(2).reduce(:+).reduce(:+) + range.end
p result # => 29
Run Code Online (Sandbox Code Playgroud)
或者,您可能会发现以下内容更具可读性:
result = range.end + range.each_cons(2)
.reduce(:+)
.reduce(:+)
Run Code Online (Sandbox Code Playgroud)
像这样:
range = 1..5
store = 0
range.each_with_index do |value, i|
next_value = range.to_a[i+1].nil? ? 0 : range.to_a[i+1]
store += value + next_value
end
p store # => 29
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法,但这是有效的.
您可以像下面这样获得下一个值:
range.to_a[i+2]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9816 次 |
最近记录: |