通过ruby数组迭代迭代

And*_*ndi 18 ruby arrays iterator

我如何迭代ruby数组并始终获得两个值,当前和下一个,如:

[1,2,3,4,5,6].pairwise do |a,b|
  # a=1, b=2 in first iteration
  # a=2, b=3 in second iteration
  # a=3, b=4 in third iteration
  # ...
  # a=5, b=6 in last iteration
end
Run Code Online (Sandbox Code Playgroud)

我的用例:我想测试数组是否已排序,并且通过使用这样的迭代器,我总能比较两个值.

我不是each_slice在这个问题中寻找:将ruby数组转换为连续对的数组

Urs*_*sus 34

您正在寻找each_cons:

(1..6).each_cons(2) { |a, b| p a: a, b: b }
# {:a=>1, :b=>2}
# {:a=>2, :b=>3}
# {:a=>3, :b=>4}
# {:a=>4, :b=>5}
# {:a=>5, :b=>6}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这正是我需要的!我浏览了[E​​numerable](http://ruby-doc.org/core-2.1.0/Enumerable.html)和[Enumerator](http://ruby-doc.org/core-2.1.0/Enumerator. HTML)但没有看到这一个.谢谢 (2认同)
  • @Andi和你的用例:`ary.each_cons(2).all?{| a,b | 如果值已排序,则a <= b}`返回"true".(不幸的是,由于`each_cons`产生值的方式,你不能在这里使用`all?(&:<=)` (2认同)