ruby 在每个循环中获取下一个值

标签 ruby each

我可以在每个循环中获取下一个值吗?

(1..5).each do |i|
    @store = i + (next value of i)
end

答案在哪里..

1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 = 29

我还可以获得下一个值的下一个吗?

最佳答案

早在Ruby 1.8.7 , Enumerable 模块有一个方法 each_cons这几乎完全符合您的要求:

each_cons(n) { ... } → nil
each_cons(n) → an_enumerator

Iterates the given block for each array of consecutive <n> elements. If no block is given, returns an enumerator.

e.g.:

(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

但你也可以这样做:

range = 1..5

result = range.each_cons(2).reduce(:+).reduce(:+) + range.end

p result # => 29

或者,您可能会发现以下内容更具可读性:

result = range.end + range.each_cons(2)
                          .reduce(:+)
                          .reduce(:+)

关于ruby 在每个循环中获取下一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707743/

相关文章:

Ruby:使用条件的返回进行变量赋值和比较

ruby - Ruby gems 的默认搜索路径是什么?即默认的 GEM_HOME

jQuery .each 和 div 的高度

javascript - 使用 jQuery 的 .prop 方法将属性设置为函数

ruby - 什么是大写新行的正则表达式?

ruby-on-rails - 如何继续将 Rails 2 项目升级到 Rails 3+?

ruby - 为什么我在使用 pivotal-tracker gem 时会在 libxml_ruby.bundle 中遇到段错误?

javascript - Handlebars - 通过嵌套的 each 中的外部键访问数组

variables - 柏树 |无法更改每个循环内的变量

jquery - 每个循环中的 ajax 执行不正确